https://www.acmicpc.net/problem/5747
문제
'홀짝' 게임에는 여러가지 방식이 존재한다. 그중 한가지 방법은 두 사람이 각자 '홀수', '짝수' 중 하나를 말한다. 그러고서 셋을 센다('셋, 둘, 하나!'). '하나!'에서 두 사람은 한 손으로 0부터 5까지의 수를 손가락의 개수로 표현한다. 만약 두 사람이 내민 손가락의 수를 세었을 때 합이 짝수라면 처음 짝수를 외친 사람이 승리하고, 반대로 홀수라면 처음 홀수를 외친 사람이 승리한다.
존과 매리는 이 홀짝 게임을 몇 판하려고 한다. 홀수를 좋아하는 존은 모든 판에서 홀수를 고르기로 했고, 매리는 짝수를 고르기로 했다. 존과 매리는 각 경기의 카드를 보면서 나중에 결과를 다시 확인하기 위해 게임을 하는 동안 각자의 카드에 자신이 내민 숫자를 적기로 했다. 그런데 게임에서 질 것 같은 존은 막판에 카드를 섞어버렸다!
섞인 카드들로 매리가 반드시 이기는 판이 최소 몇 개인지 프로그램을 작성해주자.
입력
첫째줄에는 홀짝 게임을 한 횟수를 나타내는 정수 N을 입력받는다. 둘째줄에는 매리가 낸 수들을 입력받는다. 셋째줄에는 존이 낸 수들을 입력받는다. N=0을 입력받을 때까지 반복한다.
출력
매리가 반드시 이기는 판이 최소 몇 개인지 출력하라.
위는 문제에 불필요한 이야기는 빼고, 필요한 이야기만 번역해보았습니다. 제 입맛대로 번역한 것이기에 더 자세히는 직접, 혹은 번역기의 힘을 빌려보시기 바랍니다..!
해결방법
이 문제는 모든 판에서 홀수가 되는 경우(존이 이기는 경우)를 빼주는 방법으로 풀었다.
다시말해 홀수가 되는 경우, 즉 홀+짝(or 짝+홀)인 경우를 떠올리면 풀었다.
문제에 주어진 예제를 통해 이해해보자.
(입력) 9
(입력,Mary) 0 2 2 4 2 1 2 0 4
(입력,John) 1 2 3 4 5 0 1 2 3
(정답) 3
9가 의미하는 것은 매리 혹은 존이 한 게임의 판 수이다.
- 매리: 홀수가 1개, 짝수가 8개
- 존 : 홀수가 5개, 짝수가 4개
매리가 가진 홀수와 존이 가진 짝수로, 또한 매리가 가진 짝수와 존이 가진 홀수로 홀수를 만들 수 있다. 이때 최대로 만드는 경우는 9-(1+5)=6 인데 '게임한 횟수 - min(매리홀수, 존짝수) - min(매리짝수, 존홀수)' 라는 식을 세워서 풀이하였다. (단, min(10,5) == 5 이다.)
# mary : blue card, 짝수.
# 홀수를 만드는 방법 : 홀+짝 or 짝+홀
def count_odd(arr):
cnt = 0
for i in arr:
if i%2==1:
cnt+=1
return cnt
while True:
n = int(input())
if n == 0:
break
else:
Mary = list(map(int,input().split()))
John = list(map(int,input().split()))
odd_m = count_odd(Mary)
even_m = n - odd_m
odd_j = count_odd(John)
even_j = n - odd_j
ans = n - min(odd_m, even_j) - min(odd_j, even_m)
print(ans)
코드 설명
무한 루프 안에서 코드를 실행합니다. 탈출조건은 게임한 횟수를 0으로 입력한 경우입니다.
매리와 존이 낸 숫자를 리스트로 입력받습니다.
매리가 낸 숫자들 중에서 홀수의 개수와 짝수의 개수를 구해줍니다.
존도 마찬가지로 구해줍니다.
아까 만들었던 식으로 정답을 구하고, 출력합니다.
'문제 풀이 > 백준' 카테고리의 다른 글
[Python] 백준 23885 - 비숍 투어 (0) | 2022.05.11 |
---|---|
[Python] 백준 6588 - 골드바흐의 추측 (0) | 2022.05.11 |
[Python] 백준 1439 - 뒤집기 (0) | 2022.05.07 |
[Python] 백준 9237 - 이장님 초대 (0) | 2022.05.06 |
백준 1237 - 정ㅋ벅ㅋ (0) | 2022.05.05 |
댓글