728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
이 문제는 주어진 문자열을 날짜부분과 개인정보 부분으로 적절하게 나누면서, 두 날짜를 비교해야하는 문제이다.
이 문제를 풀기 위해서는 먼저 split() 함수를 통해 문자열을 적절하게 분리해주어야 한다.
- today : split('.')을 통해 연, 월, 일로 분리 가능
- terms : split(' ')을 통해 개인정보와 유효기간으로 분리 가능
- privacies : split(' ')과 split('.')을 통해 연, 월, 일과 개인정보로 분리 가능
이를 통해 terms와 privacies에서 각각 개인정보가 공통으로 포함되므로, privacies의 날짜를 계산해줄 때, terms의 유효기간을 더해준다.
이 때, 날짜를 간편하게 비교해주기 위해 두 날짜 모두 일 단위로 변환해서 비교해준다. 모든 달은 28일로 계산된다고 하였으므로 다음과 같이 계산해줄 수 있다.
- 연 : 12개월 * 28일
- 월 : 28일
- 일 : 1일
각 날짜에 위의 규칙을 적용해 날짜를 계산해주고, 비교해주면 쉽게 문제를 해결할 수 있다.
정답 코드
python
def calculate(date, r) :
date = list(map(int, date.split('.')))
return (date[0] * 12 + date[1]) * 28 + date[2] + r * 28
def solution(today, terms, privacies):
split_terms = [i.split() for i in terms]
answer = []
for i in range(len(privacies)) :
period, priv = privacies[i].split()
j = 0
while j < len(split_terms) :
if split_terms[j][0] == priv : break
j += 1
if calculate(today, 0) >= calculate(period, int(split_terms[j][1])) : answer.append(i + 1)
return answer
728x90
'Algorithm > PS' 카테고리의 다른 글
[BOJ/백준] 3533 - Explicit Formula [python] (0) | 2023.03.07 |
---|---|
[BOJ/백준] 3507 - Automated Telephone Exchange [python] (0) | 2023.03.07 |
[BOJ/백준] 26546 - Reverse [python] (0) | 2023.03.06 |
[BOJ/백준] 26532 - Acres [python] (0) | 2023.03.06 |
[BOJ/백준] 26531 - Simple Sum [python] (0) | 2023.03.06 |