문제
0부터 9까지의 숫자가 표시된 카드를 가지고 두 사람 A와 B가 게임을 한다. A와 B에게는 각각 0에서 9까지의 숫자가 하나씩 표시된 10장의 카드뭉치가 주어진다. 두 사람은 카드를 임의의 순서로 섞은 후 숫자가 보이지 않게 일렬로 늘어 놓고 게임을 시작한다. 단, 게임 도중 카드의 순서를 바꿀 수는 없다.
A와 B 각각이 늘어놓은 카드를 뒤집어서 표시된 숫자를 확인하는 것을 한 라운드라고 한다. 게임은 첫 번째 놓인 카드부터 시작하여 순서대로 10번의 라운드로 진행된다. 각 라운드에서는 공개된 숫자가 더 큰 사람이 승자가 된다. 승자에게는 승점 3점이 주어지고 패자에게는 승점이 주어지지 않는다. 만약 공개된 두 숫자가 같아서 비기게 되면, A, B 모두에게 승점 1점이 주어진다.
10번의 라운드가 모두 진행된 후, 총 승점이 큰 사람이 게임의 승자가 된다. 만약, A와 B의 총 승점이 같은 경우에는, 제일 마지막에 이긴 사람을 게임의 승자로 정한다. 그래도 승부가 나지 않는 경우는 모든 라운드에서 비기는 경우뿐이고 이 경우에 두 사람은 비겼다고 한다.
A와 B가 늘어놓은 카드의 숫자가 순서대로 주어질 때, 게임의 승자가 A인지 B인지, 또는 비겼는지 결정하는 프로그램을 작성하시오.
입력
입력 파일은 두 개의 줄로 이루어진다. 첫 번째 줄에는 A가 늘어놓은 카드의 숫자들이 빈칸을 사이에 두고 순서대로 주어진다. 두 번째 줄에는 B가 늘어놓은 카드의 숫자들이 빈칸을 사이에 두고 순서대로 주어진다.
출력
첫 번째 줄에는 게임이 끝난 후, A와 B가 받은 총 승점을 순서대로 빈칸을 사이에 두고 출력한다. 두 번째 줄에는 이긴 사람이 A인지 B인지 결정해서, 이긴 사람을 문자 A 또는 B로 출력한다. 만약 비기는 경우에는 문자 D를 출력한다.
예제 입력 1 복사
4 5 6 7 0 1 2 3 9 8
1 2 3 4 5 6 7 8 9 0
예제 출력 1 복사
16 13
A
[ 문제분석 ]
10번의 라운드에서 카드게임에 이긴 사람에게 점수를 부여하는 방식이다. 여기서 중요한 부분은 두 사람의 점수는 같지만 비기지 않았을 때다. 점수는 같아도 가장 마지막에 이긴 사람을 최종 승리자라고 문제에서 명시했기 때문에 점수가 같아지기 전 가장 마지막으로 누가 이겼는지 알아내는 부분이 조금 까다롭다.
[ 코드 ]
[ 문제풀이 ]
마지막에 누가 이겼는지 출력하기 전에 여러가지 경우를 생각해봐야 한다.
A가 이겼을 때, B가 이겼을 때, A와 B가 10라운드 모두 비겨서 둘 다 10점일 때, A와 B의 최종점수가 같지만 결과는 비기지 않고 A가 이겼거나 B가 이겼을 때 총 5가지의 경우의 수가 존재한다.
마지막 3가지의 경우가 조금 까다롭지만, 조건문을 통해 잘 나눠서 생각하면 체계적으로 코드를 짤 수 있다.
조건문의 구조와 모든 경우의 수를 생각하는데 시간이 걸렸던 문제였다.
'Koala - 5기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/python] 2750번 수 정렬하기 (0) | 2022.01.23 |
---|---|
[BOJ/python] 4458번 첫 글자를 대문자로 (0) | 2022.01.23 |
[백준/python] 10773번 - 제로 (0) | 2022.01.22 |
[BOJ 19946 / Python 3] 2의 제곱수 계산하기 (0) | 2022.01.22 |
<2주차> [BOJ / C++] 11944번 - NN (0) | 2022.01.22 |