본문 바로가기
Algorithm

[구현/수학] 백준 15080 Every Second Counts - Python

by jangThang 2022. 2. 28.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    15080번: Every Second Counts

    Input consists of two lines: the first contains the start time and the second contains the end time for a single taxi ride. Each time is of the form hh : mm : ss, giving the hour, minute and seconds. Meredith uses a 24 hour clock, with 0 : 0 : 0 representi

    www.acmicpc.net

     

     

     

    2. 문제 풀이

     두 시각의 차이를 구하는 문제입니다.

     

    2022.02.26 - [Algorithm] - [구현/수학] 백준 18312 시각 - Python

     

    [구현/수학] 백준 18312 시각 - Python

    [ Contents ] 1. 문제 (링크 참조) 18312번: 시각 정수 N과 K가 입력되었을 때 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 K가 하나라도 포함되는 모든 시각을 세는 프로그램을 작성하시오.

    star7sss.tistory.com

     위 문제와 비슷합니다. 다만 이 문제는 하루를 넘어갈 수 있습니다. 예시 입력 3과 같이, 23시에 시작해서 다음날 1시까지의 시차를 구해야할 수도 있습니다.

     

     

     

    3. 코드

    start = list(map(int, input().split(':')))
    end = list(map(int, input().split(':')))
    
    res = 0 #두 시각의 차
    
    #초 차이
    if start[2] <= end[2]:
        res += end[2] - start[2]
    else:
        end[1] -= 1
        res += end[2] - start[2] + 60
    
    #분 차이
    if start[1] <= end[1]:
        res += (end[1] - start[1])*60
    else:
        end[0] -= 1
        res += (end[1] - start[1] + 60)*60
    
    #시 차이
    if start[0] <= end[0]:
        res += (end[0] - start[0])*3600
    else:
        end[0] += 24
        res += (end[0] - start[0])*3600
    
    print(res)

     정말 방법론적으로 풀면 위와 같습니다. 초등학교 때 배우는 시간계산법이죠. 초부터 시작해서 부족하면 윗자리에서 빌려오고....

     

     

    sh, sm, ss = map(int, input().split(':'))
    eh, em, es = map(int, input().split(':'))
    
    res = (eh-sh)*3600 + (em-sm)*60 + (es-ss)
    if res < 0:
        res += 86400 #하루 더하기
    print(res)

     차라리 전체 시간을 '초'로 환산해서 계산하면 더 쉽습니다. 두 시각의 차이를 구한다음, 음수라면 다음 날로 넘어간 경우입니다. 따라서 하루를 더해줍니다. 86400초는 60 * 60 * 24로 하루의 초 시간입니다.

     

    star가 되고나서 Tistory

    반응형

    댓글