사다리 게임 요구사항
간단한 사다리 게임을 구현한다. n개의 사람과 m개의 사다리 개수를 입력할 수 있어야 한다. 사다리는 랜덤으로 있거나 없을 수도 있다. 사다리가 있으면 -를 표시하고 없으면 " " 빈공백을 표시한다. 양옆에는 |로 세로를 표시한다. 사다리 상태를 화면에 출력한다. 어느 시점에 출력할 것인지에 대한 제약은 없다.
메소드 분리
- indent depth를 2단계에서 1단계로 줄여라.
- else를 사용하지 마라.
- 메소드의 크기가 최대 10라인을 넘지 않도록 구현한다.
- method가 한 가지 일만 하도록 최대한 작게 만들어라.
객체 역할 분담
- 사다리 게임에 참여하는 사람에 이름을 최대5글자까지 부여할 수 있다. 사다리를 출력할 때 사람 이름도 같이 출력한다.
- 사람 이름은 쉼표(,)를 기준으로 구분한다.
- 사람 이름을 5자 기준으로 출력하기 때문에 사다리 폭도 넓어져야 한다.
- 이름 속성을 갖는 참여자 LadderPlayer struct를 작성한다.
- 모든 구조체는 각자 다른 스위프트 파일로 작성한다.
- 사다리 높이 속성과 참여자를 Array로 포함하는 LadderGame struct를 작성한다.
- 사용자의 입력을 받는 구조체(InputView)와 결과를 출력하는 구조체(ResultView)를 분리해서 구현한다.
- main 에서는 앞에서 분리한 타입들을 조합해 기능 구현을 완성한다.
문제점:
- 결과가 중복이 되진 않는지 확인한다.
- 사다리(-)가 같은 줄(row)에서 붙어있으면 안된다. 왼쪽이든 오른쪽이든 선택해야 하므로.
해결방법:
- 사용가능한 최대 사다리 개수 제한 : 한 줄(row) 내에서 사다리 최대 개수는 전체 열(col) 개수의 절반(반올림 적용). 사다리는 연속으로 들어갈 수 없기 때문. 사다리 사용한만큼 -1씩 감소.
- 사다리 위치 랜덤 뽑기 시 좌우에 사다리가 있는 경우, 사다리를 찍지 않음.
단위 테스트
- 콘솔에 입/출력하는 코드는 단위 테스트하기 어렵기 때문에, 이번 단계에서는 입출력하는 코드는 단위 테스트 대상에서 제외한다.
- 콘솔 입/출력를 제외한 나머지 모든 소스 코드에 있는 모든 메서드에 대한 단위 테스트 로직을 구현한다.