https://www.acmicpc.net/problem/17281
어려운 자료구조나 복잡한 알고리즘이 있진 않았지만, 구현할게 많아서 귀찮았다.
타순에 따라, 득점하는 결과가 다르므로 최대 득점하는 타순을 찾으려면 모든 경우를 따져봐야 한다. 타순을 정하기 위해 next_permutation을 사용하였다. 각 타순에 따라 선수들이 행동을 하고, 그에 맞게 득점 결과를 반환한 뒤, 가장 큰 득점 결과를 출력하면 된다.
문제를 해결하며 생각을 해야할 부분은
- 1번선수는 무조건 4번 타석에 서야하는 것
- 이닝이 바뀌어도, 타석의 순서는 유지되야 하는것( 1이닝에서 5번 선수에서 3 Out을 당하면 2이닝에서는 6번 선수부터 타석에 들어감)
정도 였다.
먼저, 1번 요구사항을 만족시키기 위해, deque 자료형을 사용하였다. 1을 제외하고 2,3,4,5,6,7,8,9를 넣은 뒤, 4번째 위치에 1을 삽입한 뒤, next_permutation을 돌렸다.
다음은, 각 주자의 행동별로 득점을 하는지 확인하였다.
ground 배열에 1,2,3루의 정보를 저장하고 cur_player에 현재 타석에 들어간 타자의 번호를 저장하고 그에 맞는 행동을 하기 위해 play[i][cur_player-1]에서 값을 가져왔다.
한명의 행동의 끝나면 값을 하나 증가시켜서 다음 선수가 행동할 수 있게 하였고, 9가 넘어가면 안되므로 9의 나머지값을 사용하였다.
'Problem Solving > 백준' 카테고리의 다른 글
[삼성 SW 역량 테스트 기출 문제] 14502_연구소 (0) | 2020.02.22 |
---|---|
[삼성 SW 역량 테스트 기출 문제] 14503_로봇 청소기 (0) | 2020.02.22 |
[삼성 SW 역량 테스트 기출 문제] 17779_게리맨더링 2 (0) | 2020.02.07 |
[백준 BOJ] 11559_Puyo Puyo (0) | 2020.01.24 |
[삼성 SW 역량 테스트 기출 문제] 14499_주사위 굴리기 (0) | 2019.12.22 |