Problem : 야구
유형 : 완전탐색, 구현
문제 해석
- 주어진 야구 규칙에 맞춰서 게임을 진행한다
- 각 선수 별로 이닝 마다 치는 타격이 정해져 있다.
- 1번선수는 항상 4번 타석에 선다.
- 최고 점수를 구하라.
문제 재해석
- 전부 다 해보면 되는 완탐, 시뮬 문제이다.
해결 전략
- 1번 선수를 제외하고 나머지 선수로 만들 수 있는 모든 조합을 만든다.
- 그리고 시뮬레이션 하면서 모든 조합에 따른 결과를 다 뽑아본다.
설계, 구현
- 1번 선수를 제외하고
permutation
으로 모든 조합을 만들어본다. - 1번 선수는 4번 타석에 넣는다.
- 게임을 진행하는데, 해당 이닝이 끝나도 순서는 계속 이어지게 한다.
- 이 부분을 큐로 구현했었는데 시간이 상당히 오래 걸려서 재 설계 했다.
- 어차피 선수는 9명으로 고정되어있으니 10번째 차례는 1번 선수로 돌아가게 했다.
- 아웃이 아닌 경우에는, 0 ~ 3루에 선수가 있다면 전부 타격의 포인트 N 만큼 움직이게 했다.
- 이동 하려는 것이 4루 이상이면 점수를 내게 했다.
- 방금 친 타자도 N루로 움직이게 했다.
주의할 점
- 이 야구는 50이닝까지 가능하다 처음에 9이닝인줄 알고 잘못 구현했었다.
- 타석의 타자를 움직이지 않는 실수를 할뻔했다.
디버깅
- 큐를 이용해서 처음에 설계한 방법은, 실행 시간이 오래걸렸다.
- 삽입 삭제 과정이 잦아 시간을 초과 시키는 원인이 되는 것 같아서 재설계했다.
- 큐를 이용한 것도, 밀어내기 방식으로 움직여야 되는 줄 알고 큐로 구현한 것인데 문제를 잘못 읽었었다.
코드
1 |
|
피드백
- 배경 지식에 의존 하지 말고 문제에서 주어진 대로만 구현하자.