문제
"I love Croatia"는 네델란드의 인기 티비 프로그램 "I love my country"의 포맷 라이센스를 수입해 만든 크로아티아의 티비쇼이다. 이 티비쇼에서 가장 인기있는 게임은 "Happy Birthday"이며, 이 게임에 대한 문제를 풀게 된다.
플레이어 8명이 오른쪽 그림과 같이 원을 이루어서 앉아있다. 한 사람은 게임이 시작한지 3분 30초가 지나면 터지는 폭탄을 들고 있다. 폭탄을 들고있는 사람에게 질문을 하면서 게임은 시작된다. 어떤 문제의 정답을 맞추지 못한 경우나, 문제를 스킵한 경우에는 그 즉시 다음 문제를 받게 된다. 문제의 정답을 맞춘 경우에는 폭탄을 바로 왼쪽에 있는 플레이어에게 넘겨주고, 넘겨받은 플레이어에게 다음 질문이 나가게 된다.
게임이 시작했을 때 폭탄을 들고 있는 사람의 번호와 처음 N개의 질문을 대답할때까지 걸린 시간이 주어진다. 이때, 폭탄을 터뜨린 사람의 번호를 구하는 프로그램을 작성하시오.
각 사람이 질문을 듣고 대답할 때까지 걸린 시간과, 그 사람의 대답이 맞았는지(T), 틀렸는지(N), 스킵했는지(P)가 주어진다. 정답을 말하는 시간, 질문을 듣는 시간은 모두 0이라고 가정하며, 박스를 전달하는 시간도 0이라고 가정한다. 항상 사람이 폭탄을 들고있었을 때 터지는 입력만 주어진다.
입력
첫째 줄에 게임이 시작했을 때 폭탄을 들고 있는 사람의 번호 K (1 ≤ K ≤ 8)가 주어진다.
둘째 줄에는 질문의 개수 N (1 ≤ N ≤ 100)이 주어진다.
다음 N개 줄에는 i번째 질문을 대답하기까지 걸린 시간(단위: 초) T (1 ≤ T ≤ 100), 그 플레이어의 대답 Z (T, N, P중 하나) 가 주어진다.
출력
폭탄을 터뜨린 사람의 번호를 출력한다.
예제 입력 1 복사
1
5
20 T
50 T
80 T
50 T
30 T
예제 출력 1 복사
5
예제 입력 2 복사
3
5
100 T
100 N
100 T
100 T
100 N
예제 출력 2 복사
4
예제 입력 3 복사
5
6
70 T
50 P
30 N
50 T
30 P
80 T
예제 출력 3 복사
7
나의 풀이:
K = int(input()) # 폭탄 들고 있는 사람의 번호
N = int(input()) # 문제의 갯수
due_time = 210 # 3분 30초를 초 단위로 계산
time = 0 # 게임이 끝나기 전 총 걸린 시간
turn = 0 # 플레이어 간 폭탄을 넘겨준 횟수
time_spent = [0] * N # N 번의 문제 중 각 걸린 시간
ans = [0] * N # N 번의 문제 중 T 인지 N 인지 P 인지 구함
for i in range(N):
time_spent[i], ans[i] = input().split(' ') # "20 T" 이런 식으로 입력받음
while time < due_time: # 걸린 시간이 210초보다 낮을 때
if ans[i] == 'T': # 만약 ans 리스트 요소가 'T' 일때
time += int(time_spent[i]) # 그 시간을 time 변수에 더함
turn += 1 # 'T' 맞추었으니 다른 플레이어에게 전달
elif ans[i] == 'N' or 'P': # 만약 ans 리스트 요소가 'N' or 'P' 일때
time += int(time_spent[i]) # 그 만큼 걸린 시간만 더함
if time >= due_time: # 만약 210초랑 같거나 커질 때 while 문 탈출
break
print(turn)
if K + turn > 8 :
print(K + turn - 8)
else :
print(K + turn)
다른 사람 풀이:
k = int(input()) - 1
n = int(input())
li = [input().split() for _ in range(n)]
time = 0
for i, j in li:
time += int(i)
if time >= 210:
print(k + 1)
break
if j == 'T':
k = (k + 1) % 8
만약 k - 1을 하지 않았을 경우 k = 7이면 j == 'T'일 때 k = 0이 나온다.
OR
k = int(input())
n = int(input())
answers = []
for i in range(n):
t, z = input().split()
answers.append([int(t), z])
remaining_time= 3*60+30
for answer in answers:
if answer[1] == 'N' or answer[1] == 'P': # 정답을 맞추지 못한 경우나 문제를 스킵한 경우
remaining_time -= answer[0]
if remaining_time <= 0:
break
else: # 정답을 맞춘 경우
remaining_time -= answer[0]
if remaining_time <= 0:
break
else:
k = k + 1 if k+1<=8 else 1 # 폭탄을 바로 왼쪽에 있는 플레이어에게 넘겨줌
print(k)
TAKEAWAY:
느낀점: