프로그래머스 연습문제에 존재하는 카카오 코딩테스트에 출제되었던 문제이다.
원본 문제
https://school.programmers.co.kr/learn/courses/30/lessons/150370
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 해석
현재 날짜, 약관 종류, 약관 유효기간, 약관 수집 날짜, 수집한 약관 종류가 주어진다.
약관 유효기간이 지나 파기해야할 정보를 구하는 문제이다.
문제 풀이
기본적으로 공백이나 온점을 기반으로 나누어 데이터를 다듬고 해결하는 문제이다.
모든 달의 날짜를 28일로 제한하기 때문에 쉽게 날짜로 변환할 수 있다고 생각했다. 따라서 모든 날짜를 일일히 계산하려 푸려고 했다.
하지만 코드를 작성하는 도중 어차피 모든 달이 28일이기 때문에 년도와 달을 모두 일로 변환하여 비교해주면 쉽다고 생각했다.
따라서 날짜를 일수로 변화하여 계산해 문제를 해결했다.
문제 코드
# 날짜를 일로 변환
def hashing(date):
y, m, d = map(int, date.split('.'))
m += y * 12
d += m * 28
return d
# 약관의 종류를 딕셔너리로 정리
def get_rules(terms):
rules = {}
for cur in terms:
a, b = cur.split()
rules[a] =int(b)
return rules
def check_answer(end_dates, today):
target = hashing(today)
ans = []
for index, value in end_dates:
if target >= value:
ans.append(index)
return ans
def solution(today, terms, privacies):
answer = []
# 약관 종류 정리
rules = get_rules(terms)
# 파기 만료 기간 구하기
end_dates = []
for i in range(len(privacies)):
date, r = privacies[i].split()
value = hashing(date)
value += rules[r] * 28
end_dates.append([i + 1, value])
answer = check_answer(end_dates, today)
return answer
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / 파이썬] 2023 KAKAO BLIND RECRUITMENT 표 병합 (0) | 2023.01.18 |
---|---|
[프로그래머스 / 파이썬] 2023 KAKAO BLIND RECRUITMENT 표현 가능한 이진트리 (0) | 2023.01.17 |
[프로그래머스 / 파이썬] 테이블 해시함수 (0) | 2023.01.09 |
[프로그래머스 / 파이썬] 마법의 엘리베이터 (0) | 2023.01.08 |
[프로그래머스 / 파이썬] 2023 KAKAO BLIND RECRUITMENT 이모티콘 할인행사 (3) | 2023.01.08 |
프로그래머스 연습문제에 존재하는 카카오 코딩테스트에 출제되었던 문제이다.
원본 문제
https://school.programmers.co.kr/learn/courses/30/lessons/150370
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 해석
현재 날짜, 약관 종류, 약관 유효기간, 약관 수집 날짜, 수집한 약관 종류가 주어진다.
약관 유효기간이 지나 파기해야할 정보를 구하는 문제이다.
문제 풀이
기본적으로 공백이나 온점을 기반으로 나누어 데이터를 다듬고 해결하는 문제이다.
모든 달의 날짜를 28일로 제한하기 때문에 쉽게 날짜로 변환할 수 있다고 생각했다. 따라서 모든 날짜를 일일히 계산하려 푸려고 했다.
하지만 코드를 작성하는 도중 어차피 모든 달이 28일이기 때문에 년도와 달을 모두 일로 변환하여 비교해주면 쉽다고 생각했다.
따라서 날짜를 일수로 변화하여 계산해 문제를 해결했다.
문제 코드
# 날짜를 일로 변환
def hashing(date):
y, m, d = map(int, date.split('.'))
m += y * 12
d += m * 28
return d
# 약관의 종류를 딕셔너리로 정리
def get_rules(terms):
rules = {}
for cur in terms:
a, b = cur.split()
rules[a] =int(b)
return rules
def check_answer(end_dates, today):
target = hashing(today)
ans = []
for index, value in end_dates:
if target >= value:
ans.append(index)
return ans
def solution(today, terms, privacies):
answer = []
# 약관 종류 정리
rules = get_rules(terms)
# 파기 만료 기간 구하기
end_dates = []
for i in range(len(privacies)):
date, r = privacies[i].split()
value = hashing(date)
value += rules[r] * 28
end_dates.append([i + 1, value])
answer = check_answer(end_dates, today)
return answer
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / 파이썬] 2023 KAKAO BLIND RECRUITMENT 표 병합 (0) | 2023.01.18 |
---|---|
[프로그래머스 / 파이썬] 2023 KAKAO BLIND RECRUITMENT 표현 가능한 이진트리 (0) | 2023.01.17 |
[프로그래머스 / 파이썬] 테이블 해시함수 (0) | 2023.01.09 |
[프로그래머스 / 파이썬] 마법의 엘리베이터 (0) | 2023.01.08 |
[프로그래머스 / 파이썬] 2023 KAKAO BLIND RECRUITMENT 이모티콘 할인행사 (3) | 2023.01.08 |