[BOJ] 2852. NBA 농구

Jimeaning·2023년 5월 1일
1

코딩테스트

목록 보기
86/143

Python3

문제

https://www.acmicpc.net/problem/2852

키워드

  • 구현

문제 풀이

문제 요구사항

  • 골이 들어갈 때 마다 골이 들어간 시간과 팀을 기록한다
  • 농구 경기는 정확히 48분동안 진행된다
  • 각 팀이 몇 분동안 이기고 있었는지 출력하는 프로그램
  • 첫째 줄에 골이 들어간 횟수 N(1<=N<=100)이 주어진다
  • 둘째 줄부터 N개의 줄에 득점 정보가 주어진다.
  • 득점 정보는 득점한 팀의 번호와 득점한 시간으로 이루어져 있다.
    • 팀 번호는 1 또는 2이다.
    • 득점한 시간은 MM:SS(분:초) 형식이며, 분과 초가 한 자리일 경우 첫 째 자리가 0이다. 분은 0보다 크거나 같고, 47보다 작거나 같으며, 초는 0보다 크거나 같고, 59보다 작거나 같다. 득점 시간이 겹치는 경우는 없다.

변수 및 함수 설명

  • n: 골이 들어간 횟수 (1<=n<=100)
  • one: 1번 팀이 이긴 시간
  • two: 2번 팀이 이긴 시간
  • flag: 어느 팀이 이기는지를 나타내는 변수. 1번 팀이 이길 때는 양수(+1씩), 2번 팀이 이길 때는 음수(-1씩), 비길 때는 0이 됨.
  • team: 득점한 팀의 번호 (1 또는 2)
  • time: 득점한 시간 (mm:ss)
  • si, bun: 콜론(:)을 기준으로 mm은 시(si), ss는 분(bun)
  • goal: 승점을 가진 시간, 즉 총 농구 경기 시간(48분)에서 골을 넣은 시각을 뺀 숫자

풀이

(입력 및 선언)

  • n을 입력받는다.
  • 1번 팀과 2번 팀이 이긴 시간을 0으로 초기화한다.
  • flag를 0으로 초기화 한다.

(반복문)

  • n개 반복

  • 득점한 팀의 번호와 시간을 문자형 그대로 입력받는다.

  • 득점한 시간을 콜론(:)을 기준으로 분리한다.

  • 48분에서 득점한 시간을 뺀 값을 goal에 대입한다.

  • 만약 1번 팀이 득점했다면,

    • 만약 이기려고 하는 순간이면, one에 goal 값을 더한다.
    • flag를 1 증가시킨다 (이제 1번 팀이 이기는 중)

    • 만약 이제 비기려고 한다면, two에 two-goal 한 값을 넣어준다.
  • 2번 팀이 득점했다면,
    - 만약 이기려고 하는 순간이면, two에 goal 값을 더한다.
    - flag를 1 감소시킨다 (이제 2번 팀이 이기는 중)

    - 만약 이제 비기려고 한다면, one에 one-goal 한 값을 넣어준다.

(최종 출력)

  • 분과 초가 한 자리일 경우 첫 째 자리를 0으로 맞춰서 출력한다.
  • 콜론을 기준으로 왼쪽에는 분, 오른쪽에는 초를 출력한다. (mm:ss)

format 함수
문자열 포매팅이란 문자열을 이쁘게 만드는 방법이다.
format 함수는 중괄호 {, } 안에 포매팅을 지정하고 format 함수의 인자로 값들을 넣는다.


'{인덱스0}, {인덱스1}'.format(값0, 값1)
ex) print('{0} x {1} = {2}'.format(a, b, a * b))


n시일 때는 0n시로 출력해야 한다.
{:0>2}

  • < : 왼쪽 정렬
  • > : 오른쪽 정렬
  • ^: 가운데 정렬
  • 기호 뒤에 나오는 숫자(2)는 자릿수이다
  • <, >, ^ 기호 앞에 특정 문자를 입력하면 공백 부분이 해당 문자로 채워진다.

최종 코드

n = int(input())

one, two = 0, 0
flag = 0

for i in range(n):
    team, time = input().split()
    
    si, bun = map(int, time.split(':'))
    goal = 48*60-(si*60+bun)
    
    if team == '1':
        if flag == 0:
            one += goal
        flag += 1
        
        if flag == 0 and two > 0:
            two = two - goal
            
    elif team == '2':
        if flag == 0:
            two += goal
        flag -= 1
        
        if flag == 0 and one > 0:
            one = one - goal
            
print('{:0>2}:{:0>2}'.format(one//60, one%60))
print('{:0>2}:{:0>2}'.format(two//60, two%60))
profile
I mean

0개의 댓글