반응형
문제
https://www.acmicpc.net/problem/2891
2891번: 카약과 강풍
첫째 줄에 팀의 수 N, 카약이 손상된 팀의 수 S, 카약을 하나 더 가져온 팀의 수 R이 주어진다. (2 ≤ N ≤ 10, 1 ≤ S, R ≤ N) 둘째 줄에는 카약이 손상된 팀의 번호가 주어진다. 팀 번호는 중복되지 않
www.acmicpc.net
🐍파이썬
import sys
n, s, r = map(int, sys.stdin.readline().split())
temp = []
kayac = [0 for _ in range(n+2)] #대회에 참가한 팀의 갯수만큼 0으로 초기화. 인덱스처리 위해 앞뒤 0으로 패딩
temp = list(map(int, sys.stdin.readline().split()))
for i in range(s): #카약 망가진 팀은 -1
kayac[temp[i]] -= 1
temp = list(map(int, sys.stdin.readline().split()))
for i in range(r): #카약 여분 있는 팀은 +1
kayac[temp[i]] += 1
for i in range(1, len(kayac)): #인덱스1부터 시작, kayac 배열 맨뒤 0패딩 있으므로 마지막팀까지 처리 가능
if kayac[i] == 1: #여분이 있다면
if kayac[i-1] == -1: #이전 팀부터 빌려준다(빨리 빌려서 먼저 경기에 나가야 하므로)
kayac[i-1] += 1
kayac[i] -= 1
#이전 팀에서 추가 카약이 필요없다면 다음 팀을 확인
elif kayac[i+1] == -1: #다음 팀의 카약이 없다면 우리 팀의 카약을 빌려준다.
kayac[i+1] += 1
kayac[i] -= 1
print(kayac.count(-1)) #마지막까지 카약을 못 빌린 팀의 갯수를 출력
다른 풀이 방법
import sys
input = sys.stdin.readline
n,s,r = map(int, input().split())
broke = list(map(int,input().split())) #카약이 부서진 팀
redun = list(map(int,input().split())) #여분이 있는 팀
broke, redun = list(set(broke)-set(redun)), list(set(redun)-set(broke))
#broke, redun = 강풍에 카약이 망가졌지만 여분이 있는 경우
ans = 0
for i in broke: #카약이 망가진 팀 중에
if i-1 in redun: #이전 팀에서 여분이 있다면 빌려주기
redun.remove(i-1) #여분이 있는 팀 목록에서 이전 팀 삭제
elif i+1 in redun: #다음 팀에서 여분이 있다면 빌려주기
redun.remove(i+1) #여분이 있는 팀 목록에서 다음 팀 삭제
else:
ans += 1 #둘 다 아닌 경우(카약을 못 빌림)
print(ans)
반응형
'Problem Solving > 백준' 카테고리의 다른 글
[백준|파이썬] 9655: 돌 게임 (실버5) (0) | 2023.04.28 |
---|---|
[백준|파이썬] 21966: (중략) (실버5) (0) | 2023.04.27 |
[백준|파이썬] 25757: 임스와 함께하는 미니게임 (실버5) (0) | 2023.04.23 |
[백준|파이썬] 2563: 색종이 (실버5) (0) | 2023.04.19 |
[백준|파이썬] 2775: 부녀회장이 될테야 (브론즈1) (0) | 2023.04.17 |
[백준|파이썬] 5766: 할아버지는 유명해! (실버4) (0) | 2023.04.14 |