https://school.programmers.co.kr/learn/courses/30/lessons/150370#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
아이디어
약관 종류, 유효기간은 딕셔너리에 넣고
today는 '.'을 기준으로 split해서 연(today[0]), 월(today[1]), 일(today[2]) 저장하고
유효기간 만료 날짜 구할 때에도 '.'을 기준으로 split해서 연(y), 월(m), 일(d) 저장
유효기간 만료 날짜 구할 때 m에 개월 수를 모두 더한 후에 12보다 크면 y에 더해주는 식으로 했는데
자꾸 특정 케이스에서만 실패가 나왔다....
반례는
terms = ["A 12"]
privacies = ["2010.01.01 A", "2019.12.17 A"]
today = "2020.12.17"
정답은 [1, 2]이다
틀렸던 이유는 오늘 날짜고 유효 기간 시작 날짜가 2019.12.17이고 12개월 유효하면
이걸 m에 더해줬을 때 2019.24.17이 된다. 그러면 정상적으로는 2020.12.17이 되어야 하는데 내 코드 상으로는 자꾸 2021.0.17이 돼서 문제였다. **그래서!!! 만약 월이 12의 배수인 경우 따로 처리해줬다**
코드
def solution(today, terms, privacies):
answer = []
# 약관 종류, 유효기간 딕셔너리에 넣기
dict = {}
for i in range(len(terms)):
a, b = terms[i].split()
dict[a] = int(b)
today = today.split('.')
# privacies 돌면서 유효기간 만료 날짜 구하기
for i in range(len(privacies)):
date = privacies[i].split()
y, m, d = date[0].split('.')
y, m, d = int(y), int(m), int(d)
m += dict[date[1]] # date[1] : type
if m > 12:
if m % 12 == 0:
y += m // 12 - 1
m = 12
else:
y += m // 12
m %= 12
d -= 1
if d == 0:
d = 28
m -= 1
# today랑 비교
if y < int(today[0]):
answer.append(i+1)
elif y == int(today[0]) and m < int(today[1]):
answer.append(i+1)
elif y == int(today[0]) and m == int(today[1]) and d < int(today[2]):
answer.append(i+1)
return answer
'Algorithm > 알고리즘 문제' 카테고리의 다른 글
[프로그래머스][Python] 성격 유형 검사하기 (1) | 2023.10.09 |
---|---|
[프로그래머스][Python] 바탕화면 정리 (0) | 2023.10.08 |
[프로그래머스][Python] 달리기 경주 (0) | 2023.10.08 |
[프로그래머스][Python] 신고 결과 받기 (0) | 2023.10.06 |
[프로그래머스][Python] 컨트롤 제트 (0) | 2023.10.05 |