본문 바로가기

Python(알고리즘,문제풀이)/BOJ (Bronze IV)

백준 5575번 / 타임 카드 - 파이썬

728x90

📚문제

출처 : 백준 / 5575번(https://www.acmicpc.net/problem/5575)

 

📝풀이

# 5575 타임 카드
for _ in range(3):
    h1, m1, s1, h2, m2, s2 = map(int,input().split())
    # 전부 다 초로 환산하여 계산
    t1 = h1*60*60 + m1*60 + s1
    t2 = h2*60*60 + m2*60 + s2
    t = t2 - t1

    # t는 현재 초이므로 시간(h)을 구하려면 3600으로 나눈 몫 구하기
    # 그리고 시간이므로 24시간이 넘으면 24로 나눈 나머지 시간구하기 (이 문제에선 이렇게 나올 일 없음)
    # 이렇게 해야 24시간 형식 유지 (ex 25시간이 나오면 24로 나눈 나머지가 1이므로 1시부터 시작)
    h = t//60//60 % 24 

    # 마찬가지로 분(m)을 구하려면 60으로 나눈 몫 구하기
    # 그리고 분이므로 60분이 넘으면 0분부터 다시 시작하기위해 60으로 나눈 나머지 분 구하기
    m = t//60 % 60

    # 초(s)는 t를 60으로 나눈 나머지 구하기
    # 60을 넘어가면 0초부터 다시 시작하기
    s = t % 60

    print(h,m,s)

시간 문제는 역시 어렵다...

 

퇴근시간 (시,분,초)에서 출근시간 (시,분,초)의 차이를 구하고

분이 (-)이고, 초도(-)이면...

이런식으로 풀려 그랬는데 너무 복잡해서 포기했다ㅎ

 

구글링 하다가 본 방법은 우선

출근시간과 퇴근시간을 초로 환산한 다음에

차이를 계산한다

 

그 다음 초를 시,분,초로 환산하면 끝

 

초로 환산한 다음에 통째로 계산 하는것까진 이해도 되고 

앞으로의 시간문제에서도 유용하게 사용할 것 같다

 

근데 결과로나온 초를 시 분 초로 환산할 때

시간은 60으로 두번 나눈 몫을 24로 나누어 주어야하고

분은 60으로 한번 나눈 몫을 60으로 나누어 주어야하는 과정이 처음엔

조금 헷갈리고 머릿속에서 이해가 잘 안됐다

 

시간과 분을 대입해보고 계속 생각해보니까 조금 이해가 됐다 

그래도 다음에 나오면 또 까먹을수도...

익숙해질 때까지 보고 완전히 이해될 때까지 풀어야겠다

 

728x90