https://www.acmicpc.net/problem/2852
문제 분석
분류
구현, 문자열
문제 설명
동혁이는 NBA 농구 경기를 즐겨 본다. 동혁이는 골이 들어갈 때 마다 골이 들어간 시간과 팀을 적는 이상한 취미를 가지고 있다.
농구 경기는 정확히 48분동안 진행된다. 각 팀이 몇 분동안 이기고 있었는지 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 골이 들어간 횟수 N(1<=N<=100)이 주어진다. 둘째 줄부터 N개의 줄에 득점 정보가 주어진다. 득점 정보는 득점한 팀의 번호와 득점한 시간으로 이루어져 있다. 팀 번호는 1 또는 2이다. 득점한 시간은 MM:SS(분:초) 형식이며, 분과 초가 한자리 일 경우 첫째자리가 0이다. 분은 0보다 크거나 같고, 47보다 작거나 같으며, 초는 0보다 크거나 같고, 59보다 작거나 같다. 득점 시간이 겹치는 경우는 없다.
출력
첫째 줄에 1번 팀이 이기고 있던 시간, 둘째 줄에 2번 팀이 이기고 있던 시간을 출력한다. 시간은 입력과 같은 형식(MM:SS)으로 출력한다.
입출력 예제)
소스코드
t1,t2=0,0
tmp1,tmp2=0,0
s=0
for i in range(int(input())):
team,time=input().split()
m,sec=map(int, time.split(':'))
t=60*m+sec
if team=='1':
if s==0:
s+=1
tmp1=t
elif s!=0:
s+=1
if s==0:
t2+=t-tmp2
else:
if s==0:
s-=1
tmp2=t
elif s!=0:
s-=1
if s==0:
t1+=t-tmp1
if s>0:
t1+=60*48-tmp1
elif s<0:
t2+=60*48-tmp2
print('{:0>2}:{:0>2}'.format((t1)//60,t1%60))
print('{:0>2}:{:0>2}'.format((t2)//60,t2%60))
문제풀이
입력받은 시각을 초로 환산하여 계산을 진행하였다.
위 문제에서 주요했던 점은 입력받을 때 이전 상황이 비기고 있었는지, 이제 막 비기게 된 것인지, 혹은 계속 이기는 상황인지를 나누어 판단해야 했다.
따라서 위 상황을 보이기 위해 s 값에 따라 if문에 들어간 후에 s+=1 혹은 s-=1을 함으로써 그 전 상황이 비기고 있는 상황이었는지 비기게 되는 상황인지를 판단할 수 있게 하였다.
참고로 s<0일때는 2번팀이 이기는 상황, s==0일 때는 비기는 상황, s>0일 때는 1번팀이 이기는 상황을 의미한다.
그리고 결과를 출력 할 때는 00과 같이 빈자리도 2자리씩 출력 해야하므로 {:0>2}를 써서 출력하도록 하였다.
'Koala - 11기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/C++] 5533번: 유니크 (0) | 2023.08.11 |
---|---|
[백준/Python] 11179번: 2진수 뒤집기 (0) | 2023.08.06 |
[백준/python3] 1759번 : 암호 만들기 (0) | 2023.08.06 |
[백준/python3] 2852번 : NBA 농구 (0) | 2023.08.06 |
[백준/Python 3] 3181번: 줄임말 만들기 (0) | 2023.08.06 |