본문 바로가기

알고리즘 공부/백준 > Python3

[백준 파이썬] #2511: 카드 놀이

www.acmicpc.net/problem/2511

 

2511번: 카드놀이

첫 번째 줄에는 게임이 끝난 후, A와 B가 받은 총 승점을 순서대로 빈칸을 사이에 두고 출력한다. 두 번째 줄에는 이긴 사람이 A인지 B인지 결정해서, 이긴 사람을 문자 A 또는 B로 출력한다. 만약

www.acmicpc.net

 

[문제]

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]를 출력한다.