코딩테스트 연습 - 개인정보 수집 유효기간 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 요약
고객의 약관 동의를 얻어서 수집된 1~n번으로 분류되는 개인정보 n개가 있습니다.
수집된 개인정보는 유효기간 전까지만 보관 가능하며, 유효기간이 지났다면 반드시 파기해야 합니다.
당신은 오늘 날짜로 파기해야 할 개인정보 번호들을 구하려 합니다.
모든 달은 28일까지 있다고 가정합니다.
- 매개변수
오늘 날짜를 의미하는 문자열 today
약관의 유효기간을 담은 1차원 문자열 배열 terms
수집된 개인정보의 정보를 담은 1차원 문자열 배열 privacies
- return 값
파기해야 할 개인정보의 번호를 오름차순으로 담은 1차원 정수 배열
문제 풀이
def solution(today, terms, privacies):
answer = []
# today 분리
today_year, today_mon, today_day = list(map(int, today.split('.')))
# terms 분리
term_dict = {}
for x in terms:
term, term_mon = x.split(' ')
term_dict[term] = term_mon
# privacies 분리
for num, x in enumerate(privacies, 1):
priv_date, priv_term = x.split(' ')
priv_year, priv_mon, priv_day = list(map(int, priv_date.split('.')))
# 유효기간 날짜 계산
month = priv_mon + int(term_dict[priv_term])
year = priv_year
while month > 12:
year += 1
month -=12
day = priv_day-1
if day < 1: # 개인정보 수집 일자가 1일일 경우
day = 28
month -= 1
# 유효기간과 오늘 비교
# 유효기간이 지나지 않은 경우 continue
if year > today_year:
continue
if year == today_year:
if month > today_mon:
continue
if month == today_mon:
if day >= today_day:
continue
answer.append(num)
return answer
모든 달이 28일까지 있다는 가정이 있어서 굳이 datetime을 사용하지 않고 풀이했다.
유효기간이 아주 긴 경우(ex.30달)를 고려하지 않아서 처음에는 month에도 1을 빼는 방식으로 풀어서 실패했다.
그래서 while문으로 변경해서 날짜를 계산했다!
while문 없이는 %를 사용하면 가능하다.
'CODING TEST > ALGORITHM - 문제' 카테고리의 다른 글
[프로그래머스/2020 KAKAO BLIND RECRUITMENT] 괄호 변환 - Python (0) | 2023.02.04 |
---|---|
[백준 : 14499] 주사위 굴리기 - Python (1) | 2023.02.01 |
[프로그래머스/Summer/Winter Coding(~2018)] 영어 끝말잇기 - Python (0) | 2023.01.22 |
[백준 : 14891] 톱니바퀴 - Python (0) | 2023.01.16 |
[카카오 인턴십/프로그래머스] 수식 최대화 - Python (0) | 2023.01.13 |