반응형
https://school.programmers.co.kr/learn/courses/30/lessons/150370#
내 풀이
def solution(today, terms, privacies):
answer = []
today_int = int(today[0:4])*10000 + int(today[5:7])*100 + int(today[8:10])
terms_dict = {}
for term in terms:
tmp = term.split()
terms_dict[tmp[0]] = int(tmp[1])
for i in range(len(privacies)):
privacy = privacies[i]
prvcy_list = privacy.split(' ')
date_str = prvcy_list[0]
y = int(date_str[0:4])
m = int(date_str[5:7])
d = int(date_str[8:10])
term_int = terms_dict[prvcy_list[1]]
new_y = y
new_m = m + term_int
new_d = d
if d == 1:
new_d = 28
new_m -= 1
else:
new_d -= 1
if new_m > 12:
quotient = new_m//12
remainder = new_m%12
if remainder == 0:
quotient-= 1
remainder=12
new_y += quotient
new_m = remainder
new_date = new_y*10000 + new_m*100 + new_d
if new_date < today_int:
answer.append(i+1)
return answer
리뷰
1. 직관적으로 보이려고 날짜를 int 로 변환할 떄 Year*1000 + Month*100 + Day 로 계산했는데 이러면 1일, 12월 등에 문제가 생겨 예외 처리를 해줘야한다. 그래서 그냥 Year*12*28 + Month*28 + Day로 계산하는게 낫다.
2. map, lambda 사용하자
다른 사람의 풀이
def to_days(date):
y, m, d = map(int, date.split("."))
return y*28*12 + m*28 + d
def solution(today, terms, privacies):
answer = []
# 함수 사용
#today_int = int(today[0:4])*10000 + int(today[5:7])*100 + int(today[8:10])
today_int = to_days(today)
# comprehension 사용
#for term in terms:
# tmp = term.split()
# terms_dict[tmp[0]] = int(tmp[1])
terms_dict = {v[0]: int(v[2:])*28 for v in terms}
for i in range(len(privacies)):
tmp_lst = privacies[i].split()
end_date = to_days(tmp_lst[0]) + terms_dict[tmp_lst[1]] -1
if end_date < today_int:
answer.append(i+1)
return answer
728x90
반응형
'개발 > Algorithm 문제 풀이' 카테고리의 다른 글
[BOJ | Python] 3344 N-Queen (0) | 2024.12.12 |
---|---|
[프로그래머스] lv2. 순위 검색 (0) | 2024.02.12 |
[프로그래머스] lv.1 가장 많이 받은 선물 (0) | 2024.01.29 |
[프로그래머스] lv.2 과제 진행하기 (0) | 2024.01.28 |
[프로그래머스] for 문과 if문을 한번에 (0) | 2022.07.15 |