A. 문제설명
https://www.acmicpc.net/problem/17281
문제에 대한 자세한 설명은 링크 참조
1. 9명으로 이루어진 야구팀의 선수들이 N이닝동안 플레이
2. 1번부터 9번의 타자들은 매 이닝마다 3아웃이 발생할 때까지 순환하며 타석에 들어감(1→2→3→...→8→9→1→2→...)
3. 각 타자가 타석에서 내는 결과는 아웃/안타/2루타/3루타/홈런로 아래와 같음
- 안타: 타자와 모든 주자가 한 루씩 진루
- 2루타: 타자와 모든 주자가 두 루씩 진루
- 3루타: 타자와 모든 주자가 세 루씩 진루
- 홈런: 타자와 모든 주자가 홈까지 진루
- 아웃: 모든 주자는 진루하지 못하고, 공격 팀에 아웃이 하나 증가
4. 매 이닝마다 타자가 수행할 결과는 정해짐
5. 감독은 1번 선수를 4번 타자로 선점함, 나머지 8명을 배치하는 조합 중, 최대 점수가 나는 경우를 구하라
B. 접근법
DFS + 시뮬레이션
우선, 1번 선수가 4번 타자로 선점된 경우를 조건으로 모든 선수를 각 순서대로 배치하는 조합을 구한다.
그리고, 매 조합을 이용하여 야구게임 시뮬레이션을 수행, 매 시뮬레이션에서 수행된 결과를 계산하여 최대에 업데이트
C. 풀이
1. 1번 선수가 4번 타자로 선점된 경우를 조건으로 모든 선수를 각 순서대로 배치하는 조합을 구함 - dfs()
2. 해당 조합에 대해서 야구게임 시뮬레이션 수행 - simulate_play()
3. 해당 타자 조합으로 들어온 이닝 정보 배열을 복사
4. N 이닝동안 플레이를 반복
5. while 문 안에서, 아웃이 3개 누적되기 전까지 1/2/3루에 선수를 진출시킴
6. 안타-1루씩, 2루타-2루씩, 3루타-3루씩, 홈런-모두 홈까지 진루
7. 모든 이닝 플레이가 완료시 해당 점수를 최대값에 업데이트
D. 내 코드