유치원 반 아이들이 식물 기르기에 대해 배우고 있어요. 선생님은 아이들에게 씨앗을 나눠 주고 흙에 심어 기르게 하면 좋겠다고 생각했어요. 그래서 아이들은 창틀을 따라 작은 컵을 놓고, 컵마다 한 가지 식물을 심었어요. 아이들은 네 가지 씨앗 중에서 좋아하는 것을 골랐어요: grass, clover, radishes, violets.
그림이 주어지면, 유치원 반의 각 아이가 어떤 식물을 담당하는지 알아내는 것이 과제예요.
이 반에는 아이가 12명 있어요:
네 가지 종류의 씨앗을 심어요:
| 식물 | 그림 표기 |
|---|---|
| Grass | G |
| Clover | C |
| Radish | R |
| Violet | V |
각 아이는 각 줄에 두 개씩, 모두 네 개의 컵을 받아요:
[window][window][window]
........................ # each dot represents a cup
........................
선생님은 아이들의 이름을 알파벳 순으로 정렬한 뒤, 그 순서대로 컵을 배정해요. 그래서 Alice가 맨 처음이고 Larry가 맨 마지막이에요.
다음은 Alice의 식물을 나타내는 예시 그림이에요:
[window][window][window]
VR......................
RG......................
창문에 가장 가까운 첫 번째 줄에는 violet과 radish가 있어요. 두 번째 줄에는 radish와 grass가 있어요.
프로그램에는 창문에 가장 가까운 줄부터 시작해 왼쪽에서 오른쪽 순서로 식물이 주어져요. 이 정보를 바탕으로 각 학생에게 어떤 식물이 속하는지 알아낼 수 있어야 해요.
예를 들어, 정원이 다음과 같다고 하면:
[window][window][window]
VRCGVVRVCGGCCGVRGCVCGCGV
VRCCCGCRRGVCGCRVVCVGCGCV
그때 Alice의 식물을 물어보면 다음과 같은 결과를 내놓아야 해요:
한편 Bob의 식물을 물어보면 이런 결과가 나와요:
이 연습 문제의 테스트는 프로그램이 Garden class로 구현되기를 기대해요 (classes도 참고해 봐요).
Python의 클래스가 익숙하지 않다면, 이 Real Python 튜토리얼이 좋은 추가 출발점이 될 거예요.
class에는 plants라는 method를 구현해야 해요. 이 메서드는 학생의 이름을 인자로 받아, 그 학생에게 속한 식물 이름의 list를 반환해요.
예시 정원을 만들면 다음과 같아요:
[window][window][window]
VRCGVVRVCGGCCGVRGCVCGCGV
VRCCCGCRRGVCGCRVVCVGCGCV
이 코드는 테스트에서 Garden("VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV")로 표현돼요.
이 표현이 제대로 동작하려면, class에 __init__() 특수 메서드를 구현해야 해요.
__init__()나 생성자가 익숙하지 않다면, Python 문서의 클래스와 인스턴스 객체에 더 자세한 설명이 있어요.
일부 테스트에서는 학생 list가 __init__()에 인자로 전달돼요.
이 list는 문제 설명에서 제공하는 12명의 학생 명단을 덮어써야 해요.
다음 두 문 모두 __init__() 메서드에서 동작해야 해요:
# Make a garden based on the default 12-student roster.
Garden("VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV")
# Make a garden based on a 2-student roster.
Garden("VRCC\nVCGG", students=["Valorie", "Raven"])
한 가지 방법은 학생 list를 기본 인자로 만드는 거예요. Python 문서에서는 함수 정의를 설명하면서 default parameters를 자세히 다뤄요.
Exercism에 가입하고 Python 트랙을 개념 17개연습 문제 146개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.