Elyse의 마법


이야기

마술사 지망생 Elyse는 기본기를 좀 연습할 필요가 있어요. Elyse에게는 다뤄 보고 싶은 카드 스택이 하나 있어요.

카드 값은 1부터 10까지만 써요. 숫자만 다루면 되도록 하려는 거예요. 그래야 이 이야기를 쓰는 연습 문제도 숫자에만 의존하면 돼요.

과제

다음은 Elyse가 초보자라는 이야기에 맞는 과제들의 예예요.

  • 스택에서 카드 꺼내기
  • 스택에 있는 카드 교환하기
  • 스택 맨 위에 카드 넣기
  • 스택에서 카드 빼기
  • 스택 맨 위의 카드 빼기
  • 스택 맨 아래에 카드 넣기
  • 스택 맨 아래에서 카드 빼기
  • 스택의 크기 확인하기

이 이야기를 이어 가면 배열 분석도 가르칠 수 있어요.

  • 카드의 위치 찾기
  • 카드가 있는지 알아내기
  • 카드가 각각 짝수인지 알아내기
  • 스택에 홀수 값 카드가 들어 있는지 확인하기
  • 스택에서 첫 번째 홀수 카드 가져오기
  • 첫 번째 짝수 카드의 위치 알아내기

이 이야기를 이어 가면 배열 변환도 가르칠 수 있어요.

  • 카드마다 값을 두 배로 만들기
  • 덱에 있는 3마다 복사본 여러 개 만들기
  • 덱의 정확히 가운데에서 카드 두 장 찾기
  • 덱 양 끝의 두 카드가 덱 가운데에 다시 나타나게 하기
  • 2가 아닌 카드는 모두 사라지게 하기
  • 섞여 있는 덱을 완벽하게 정렬된 덱으로 바꾸기
  • 모든 카드를 전체 카드 수로 바꾸기

이 이야기를 이어 가면 배열 구조 분해도 가르칠 수 있어요.

  • 첫 번째 카드 가져오기 (인덱서나 메서드 같은 일반적인 방법을 쓰지 않고)
  • 두 번째 카드 가져오기 (인덱서나 메서드 같은 일반적인 방법을 쓰지 않고)
  • 처음 두 카드 맞바꾸기 (인덱서나 메서드 같은 일반적인 방법을 쓰지 않고)
  • 맨 위 카드 버리기 (인덱서나 메서드 같은 일반적인 방법을 쓰지 않고)
  • 그림 카드 넣기 (인덱서나 메서드 같은 일반적인 방법을 쓰지 않고)

용어

다음은 연습 문제 설명(스텁 주석 포함)에서 반복되는 용어에 대한 권장 사항이지, 규칙은 아니에요.

  • 주인공은 Elyse이고, 그녀를 가리키는 대명사는 she/her예요. 인물을 가리켜야 할 때는 이름을 쓰거나 대명사를 써요.
  • array(또는 그에 해당하는 데이터 타입) 대신 스택 또는 카드 스택이라는 단어를 써요.
  • element 대신 카드라는 단어를 써요.
  • length 대신 스택의 크기를 써요.
  • 맨 위 카드는 _첫 번째 원소_예요.
  • 맨 아래 카드는 _마지막 원소_예요.

구현

다른 버전

이야기의 다른 버전은 you(학생)를 주인공으로 삼고, 덱을 다시 배열하는 것에만 초점을 맞춰요.

이야기

여러분은 마술사이고, 카드 덱을 다뤄요. 마술 묘기를 제대로 펼치려면 카드를 한 위치에서 다른 위치로 옮길 수 있어야 해요. 즉, 덱을 다시 배열할 수 있어야 하죠. 당연히 카드를 양방향으로 옮길 수 있어야 하고, "덱 맨 위에서" 또는 "덱 맨 아래에서"라고 말할 수 있어야 해요.

과제

다음은 카드를 다시 배열하고 싶어 하는 이야기에 맞는 과제들의 예예요.

  • 스택에서 카드를 주어진 한 위치에서 다른 위치로 옮기고 새 스택을 반환하는 arrange 함수 구현하기
  • 같은 일을 하되 원래 스택을 직접 변경하는 rearrange 함수 구현하기

구현

참고 자료