본문 바로가기

알고리즘 문제풀이

백준 2443. D-day Python 구현 실버5

정답 코드 : datetime을 쓰는 문제였다. 라이브러리를 사용하지 않고 풀어야 된다는 강박증이 있었던 것 같다...

import datetime
# 실버 5

today = list(map(int,input().split()))
d_day = list(map(int,input().split()))

if d_day[0]-today[0] >1000:
    print('gg')
    exit(0)
elif d_day[0]-today[0] == 1000 and (today[1], today[2]) <= (d_day[1],d_day[2]):
    print('gg')
    exit(0)
else:
    todays = datetime.date(*today)
    d_days = datetime.date(*d_day)
    print(f'D-{d_days.toordinal()-todays.toordinal()}')

오답 : 54%, 같은 연도일 때가 계산에 포함되지 않았음

# 실버 5

today = list(map(int,input().split()))
d_day = list(map(int,input().split()))

if d_day[0]-today[0] >1000:
    print('gg')
    exit(0)
elif d_day[0]-today[0] == 1000 and (today[1], today[2]) <= (d_day[1],d_day[2]):
    print('gg')
    exit(0)
def find_lunar(year):
    flag = 0
    if year % 4==0:
        flag = 1
    if year % 100==0:
        flag = 0
    if year % 400==0:
        flag = 1
    return flag
result = 0
today_luar = find_lunar(today[0])
for i in range(today[0]+1,d_day[0]):
    if find_lunar(i):
        result += 366
    else:
        result += 365

for i in range(today[1],13):
    if i == 2 and today_luar: # 윤년인 2월
        result += 29
    elif i == 2 and not today_luar: # 윤년이 아닌 2월
        result += 28
        pass
    elif i in [1,3,5,7,8,10,12]: # 31일
        result += 31
    else:
        result += 30
result -= today[2]
# 새 년도 구하기
d_day_lunar = find_lunar(d_day[0])
for i in range(1,d_day[1]):
    if i == 2 and d_day_lunar: # 윤년인 2월
        result += 29
    elif i == 2 and not d_day_lunar: # 윤년이 아닌 2월
        result += 28
        pass
    elif i in [1,3,5,7,8,10,12]: # 31일
        result += 31
    else:
        result += 30
result += d_day[2]
print(f'D-{result}')

오답 20%

# 실버 5

today = list(map(int,input().split()))
d_day = list(map(int,input().split()))

if d_day[0]-today[0] >=1000:
    print('gg')
    exit(0)
def find_lunar(year):
    flag = 0
    if year % 4==0:
        flag = 1
    if year % 100==0:
        flag = 0
    if year % 400==0:
        flag = 1
    return flag

today_luar = find_lunar(today[0])
result = (d_day[0]-1 - today[0]) *365
for i in range(today[1],13):
    if i == 2 and today_luar: # 윤년인 2월
        result += 29
    elif i == 2 and not today_luar: # 윤년이 아닌 2월
        result += 28
        pass
    elif i in [1,3,5,7,8,10,12]: # 31일
        result += 31
    else:
        result += 30
result -= today[2]
# 새 년도 구하기
d_day_lunar = find_lunar(d_day[0])
for i in range(1,d_day[1]):
    if i == 2 and d_day_lunar: # 윤년인 2월
        result += 29
    elif i == 2 and not d_day_lunar: # 윤년이 아닌 2월
        result += 28
        pass
    elif i in [1,3,5,7,8,10,12]: # 31일
        result += 31
    else:
        result += 30
result += d_day[2]
print(f'D-{result}')