본문 바로가기

Algorithm/String

(Python) - 백준(BOJ) 1340번 : 연도 진행바

반응형

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

문자열 처리 문제였습니다.

 

 

풀이방법

 1. 현재 연도가 윤년이냐 아니냐에 따라 2월의 날짜 수가 달라집니다. 이 말은 윤년에는 하루가 366일이라는 의미입니다. 따라서 먼저 윤년인지 여부를 판단합니다.

 

 2. 비교하는 최소의 단위가 '분'이기 때문에 입력 받은 정보를 분 단위로 치환해야 합니다.

* 날의 수를 셀 때 입력받은 달의 이전 달까지만 세야하며 입력받은 날짜의 이전 날짜까지만 세야합니다,

 

Code

date = input().split(" ")
one_year_total_minute = 0
days = 0

day_per_month = {
    "January"   : 31,
    "February"  : 28,
    "March"     : 31,
    "April"     : 30,
    "May"       : 31,
    "June"      : 30,
    "July"      : 31,
    "August"    : 31,
    "September" : 30,
    "October"   : 31,
    "November"  : 30,
    "December"  : 31,
}

day_per_month_yoon = {
    "January"   : 31,
    "February"  : 29,
    "March"     : 31,
    "April"     : 30,
    "May"       : 31,
    "June"      : 30,
    "July"      : 31,
    "August"    : 31,
    "September" : 30,
    "October"   : 31,
    "November"  : 30,
    "December"  : 31,
}

def isYoonYear(year):
    if(year % 400 == 0): return True
    if(year % 4 == 0 and year % 100 > 0): return True
    return False


if(isYoonYear(int(date[2])) == True):
    one_year_total_minute = 366 * 24 * 60
    for key, value in day_per_month_yoon.items() : 
        if(key == date[0]): break
        days += value

else:
    one_year_total_minute = 365 * 24 * 60
    for key, value in day_per_month.items() : 
        if(key == date[0]): break
        days += value
hour = int(date[3][0:2])
minute = int(date[3][3:])
day = int(date[1][0:-1]) - 1
totalMinute = (days + day)  * 24 * 60 + hour * 60 + minute

print(totalMinute / one_year_total_minute * 100)

 

 

Test Case

January 1, 1981 00:00

답 : 0.0