일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 해킹실습
- 코딩테스트
- 엘라스틱서치
- 문제풀이
- 알고리즘
- 토이프로젝트
- 필기
- 기초
- 데이터베이스
- 모의해킹
- 오라클
- 빅데이터
- SQL 정리
- SQL 문법
- 리눅스마스터 2급 2차
- 프로그래머스
- 스파크
- 파이썬
- 백준
- 이클립스
- 프로그래밍
- MySQL
- c언어
- 스프링부트
- SQL
- 데이터프로그래밍
- 위클리챌린지
- 스프링
- 문법
- 자바
- Today
- Total
개발일기
백준 2511번 파이썬 풀이 : 카드놀이 본문
문제 링크 : https://www.acmicpc.net/problem/2511
2511번: 카드놀이
첫 번째 줄에는 게임이 끝난 후, A와 B가 받은 총 승점을 순서대로 빈칸을 사이에 두고 출력한다. 두 번째 줄에는 이긴 사람이 A인지 B인지 결정해서, 이긴 사람을 문자 A 또는 B로 출력한다. 만약
www.acmicpc.net
문제
0부터 9까지의 숫자가 표시된 카드를 가지고 두 사람 A와 B가 게임을 한다. A와 B에게는 각각 0에서 9까지의 숫자가 하나씩 표시된 10장의 카드뭉치가 주어진다. 두 사람은 카드를 임의의 순서로 섞은 후 숫자가 보이지 않게 일렬로 늘어 놓고 게임을 시작한다. 단, 게임 도중 카드의 순서를 바꿀 수는 없다.
A와 B 각각이 늘어놓은 카드를 뒤집어서 표시된 숫자를 확인하는 것을 한 라운드라고 한다. 게임은 첫 번째 놓인 카드부터 시작하여 순서대로 10번의 라운드로 진행된다. 각 라운드에서는 공개된 숫자가 더 큰 사람이 승자가 된다. 승자에게는 승점 3점이 주어지고 패자에게는 승점이 주어지지 않는다. 만약 공개된 두 숫자가 같아서 비기게 되면, A, B 모두에게 승점 1점이 주어진다.
10번의 라운드가 모두 진행된 후, 총 승점이 큰 사람이 게임의 승자가 된다. 만약, A와 B의 총 승점이 같은 경우에는, 제일 마지막에 이긴 사람을 게임의 승자로 정한다. 그래도 승부가 나지 않는 경우는 모든 라운드에서 비기는 경우뿐이고 이 경우에 두 사람은 비겼다고 한다.
예를 들어, 다음 표에서 3번째 줄은 각 라운드의 승자를 표시하고 있다. 표에서 D는 무승부를 나타낸다. 이 경우에 A의 총 승점은 16점이고, B는 13점이어서, A가 게임의 승자가 된다.
아래 표의 경우에는 A와 B의 총 승점은 13점으로 같다. 마지막으로 승부가 난 라운드는 7번째 라운드이고, 이 라운드의 승자인 B가 게임의 승자가 된다.
A와 B가 늘어놓은 카드의 숫자가 순서대로 주어질 때, 게임의 승자가 A인지 B인지, 또는 비겼는지 결정하는 프로그램을 작성하시오.
입력
입력 파일은 두 개의 줄로 이루어진다. 첫 번째 줄에는 A가 늘어놓은 카드의 숫자들이 빈칸을 사이에 두고 순서대로 주어진다. 두 번째 줄에는 B가 늘어놓은 카드의 숫자들이 빈칸을 사이에 두고 순서대로 주어진다.
출력
첫 번째 줄에는 게임이 끝난 후, A와 B가 받은 총 승점을 순서대로 빈칸을 사이에 두고 출력한다. 두 번째 줄에는 이긴 사람이 A인지 B인지 결정해서, 이긴 사람을 문자 A 또는 B로 출력한다. 만약 비기는 경우에는 문자 D를 출력한다.
# 문제풀이
다른 문제들과 동일하게 먼저 사용할 변수들을 정해둔다.
1
2
3
4
5
6
|
a = list(map(int, input().split()))
b = list(map(int, input().split()))
a_win = 0
b_win = 0
temp = "D"
|
cs |
a, b의 카드를 리스트 형태로 입력을 받고 승점을 저장할 변수 a_win, b_win를 각각 선언한 후 무승부일 때 가장 마지막에 승리한 사람을 출력하기 위한 변수 temp를 선언해준다.
예제 3번을 살펴보면 a와 b가 모든 경기를 비겼을 경우 D를 출력해야 하기 때문에 초기값을 D로 선언을 해준다.
1
2
3
4
5
6
7
8
9
10
|
for i in range(10):
if a[i] > b[i]:
a_win += 3
temp = "A"
elif a[i] < b[i]:
b_win += 3
temp = "B"
else:
a_win += 1
b_win += 1
|
cs |
배열을 하나씩 비교하면서 temp값과 각각의 승점을 추가해준다.
1
2
3
4
5
6
7
8
|
print(a_win, b_win)
if a_win == b_win:
print(temp)
elif a_win > b_win:
print("A")
else:
print("B")
|
cs |
승점을 비교하여 temp를 출력하거나 이긴 사람의 알파벳을 출력하면 된다.
## 쉬운 문제들도 알고리즘을 그리면서 한번에 쭉 짜는 연습을 해 나가는 것이 좋아 보인다.
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
백준 1145번 파이썬 풀이 : 적어도 대부분의 배수 (0) | 2021.10.06 |
---|---|
백준 1064번 파이썬 풀이 : 평행사변형 (0) | 2021.10.06 |
백준 2476번 파이썬 풀이 : 주사위 게임 (0) | 2021.10.04 |
백준 2355번 파이썬 문제 풀이 : 시그마 (0) | 2021.10.04 |
별찍기 파이썬 풀이 - 백준 2522, 2523번 (0) | 2021.10.03 |