본문 바로가기

알고리즘/백준 문제 풀이

[Python] 1340번 연도 진행바

728x90

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

 

1340번: 연도 진행바

평년일 때, 각 달은 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31일이 있다. 윤년에는 2월이 29일이다. 윤년은 그 해가 400으로 나누어 떨어지는 해 이거나, 4로 나누어 떨어지면서, 100으로 나누어 떨어지지

www.acmicpc.net


 

22/09/16

 

 

이 문제 또한 실버 5 밀기 중 만난 문제로, 실버 5치고는 재미있게 풀었던 문제였다.(난이도가 살짝 높지만, 실버 4 수준 정도는 아니라는 뜻)


 

문제 접근 방식:

 

 

날짜를 입력 받으면, 그 년도를 기준으로 하여 현재 날짜가 몇 퍼센트 지나갔는지를 출력하는 간단한 문제이다.

 

이 문제에선 윤년을 판단해야만 했기 때문에 calendar 모듈에서 isleap메서드를 불러와서 사용하였다.

 

또한 month_dic을 만들어 주었는데, 이는 입력받은 달을 기준으로 지금까지 확정적으로 며칠을 지났는가를 value로 돌려주도록 만든 딕셔너리이다.

 

구현 자체는 1년을 기준으로 하여 지금까지 몇분이 지났는가를 계산하여 1년의 총 분(minute) 수를 나누어주는 것으로 구현하였다.


아래는 내가 위의 접근 방식과 같이 작성한 파이썬 코드이다. 더보기를 누르면 확인할 수 있다.

더보기
# 1340번 연도 진행바
# 구현
from calendar import isleap
month, day, year, time = input().split()
month_dic = {'January':0, 'February':31, 'March':59, 'April':90,
             'May':120, 'June':151, 'July':181, 'August':212,
             'September':243, 'October':273, 'November':304, 'December':334}
day = int(day.rstrip(','))
year = int(year)
hour, minute = map(int, time.split(':'))
days = month_dic[month] + day - 1
if isleap(year):
    total_minute = 366*24*60
    if month_dic[month] > 31:
        days += 1
else:
    total_minute = 365*24*60
passed_minute = days*24*60 + hour*60 + minute
print(100*passed_minute/total_minute)

'알고리즘 > 백준 문제 풀이' 카테고리의 다른 글

[Python] 1384번 메시지  (0) 2022.09.29
[Python] 1380번 귀걸이  (0) 2022.09.29
[Python] 18155번 Issuing Plates  (0) 2022.09.29
[Python] 1308번 D-Day  (0) 2022.09.29
[Python] 2057번 팩토리얼 분해  (0) 2022.09.29