세용용용용 2024. 12. 6. 16:18

1340번: 연도 진행바

 

나의 풀이

import sys
month_dict = {
    'January':1, 'February':2, 'March':3, 'April':4, 
    'May':5, 'June':6, 'July':7, 'August':8, 
    'September':9, 'October':10, 'November':11, 'December':12
}
    
def _ck_year(now_year):
    if (now_year % 400 == 0) or ((now_year % 4 == 0) and (now_year % 100 != 0)):
        return True
    else:
        return False
    
def _now_minute(year_type, month, day, hour, minute):
    answer = minute + (hour * 60) + ((day-1) * 24 * 60)

    not_yum_dict = {1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31}
    yum_dict = {1: 31, 2: 29, 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31}

    now_day = 0
    for dict_value in range(1, month):
        if year_type: # 윤년
            now_day += yum_dict[dict_value]
        else:
            now_day += not_yum_dict[dict_value]
    answer += (now_day * 24 * 60)
    return answer

n = sys.stdin.readline().rstrip()
# 월, 일, 년, 시간, 분 파싱
month, day, year, hour, minute = n.replace(',','').replace(':',' ').split()
month, day, year, hour, minute = month_dict[month], int(day), int(year), int(hour), int(minute)

yum_year = _ck_year(year) #윤년 체크
if yum_year: #윤년
    total_minute = 527040
else:
    total_minute = 525600
    
now_minute = _now_minute(yum_year, month, day, hour, minute) # 현재 날짜 기준 분
print((now_minute / total_minute)*100)

 

시간 복잡도

month, day, year, hour, minute = n.replace(',','').replace(':',' ').split() : 월, 일, 년, 시간, 분 파싱 ( 선형 시간 복잡도 )
def _now_minute(year_type, month, day, hour, minute) : 현재 날짜 기준 분 리턴하는 함수 ( 선형 시간 복잡도 )
해당 알고리즘 시간 복잡도 : 선형 시간 복잡도 ( O(n) )