[문제]
0부터 9까지의 숫자가 표시된 카드를 가지고 두 사람 A와 B가 게임을 한다. A와 B에게는 각각 0에서 9까지의 숫자가 하나씩 표시된 10장의 카드뭉치가 주어진다.
게임은 첫 번째 놓인 카드부터 시작하여 순서대로 10번의 라운드로 진행된다. 각 라운드에서는 공개된 숫자가 더 큰 사람이 승자가 된다. 승자에게는 승점 3점이 주어지고 패자에게는 승점이 주어지지 않는다. 만약 공개된 두 숫자가 같아서 비기게 되면, A, B 모두에게 승점 1점이 주어진다.
10번의 라운드가 모두 진행된 후, 총 승점이 큰 사람이 게임의 승자가 된다. 만약, A와 B의 총 승점이 같은 경우에는, 제일 마지막에 이긴 사람을 게임의 승자로 정한다. 그래도 승부가 나지 않는 경우는 모든 라운드에서 비기는 경우뿐이고 이 경우에 두 사람은 비겼다고 한다.
A와 B가 늘어놓은 카드의 숫자가 순서대로 주어질 때, 게임의 승자가 A인지 B인지, 또는 비겼는지 결정하는 프로그램을 작성하시오.
[문제 접근]
A,B가 제시한 카드를 리스트로 받아 for문을 돌면서 A,B 리스트를 비교한다. 비교한 결과를 리스트 score에 추가한다. A_score=(score의 A의 개수x3 + score의 D의 개수)와 B_score=(score의 B의 개수x3 + score의 D의 개수)를 계산하여 승자를 정한다. 만약 비겼다면 승부가 난 라운드의 승자를 알기 위해 for문을 돌면서 score의 역순으로 찾아본다.
[정답]
1. A,B가 제시한 카드를 리스트 A,B에 선언한다. A,B를 비교하여 결과를 저장할 score를 선언한다.
2. for문을 10번 돌면서 A,B를 비교하고 score에 A>B라면 A를 추가, A<B라면 B를 추가, A==B라면 D를 추가한다.
3. A_score=(score의 A의 개수x3 + score의 D의 개수)와 B_score=(score의 B의 개수x3 + score의 D의 개수)를 계산하여 A의 점수, B의 점수를 출력한다.
4. 만약 A의 점수>B의 점수라면 A를 출력하고, 만약 A의 점수<B의 점수라면 B를 출력한다. 만약 A_score==B_score==10라면 즉 10번의 라운드가 모두 같았다면 D를 출력한다. 남은 경우의 수는 A_score==B_score이면서 점수가 다른 경우이다. for문을 score의 역순으로 돌면서 승부가 난 라운드의 승자 즉 score[k]가 D가 아니라면 score[k]를 출력한다.
'알고리즘 공부 > 백준 > Python3' 카테고리의 다른 글
[백준 파이썬] #2506: 점수계산 (0) | 2021.02.23 |
---|---|
[백준 파이썬] #2605: 줄 세우기 (0) | 2021.02.23 |
[백준 파이썬] #10801: 카드 게임 (0) | 2021.02.22 |
[백준 파이썬] #10808: 알파벳 개수 (0) | 2021.02.20 |
[백준 파이썬] #2576: 홀수 (0) | 2021.02.20 |