Open hojongs opened 1 year ago
https://school.programmers.co.kr/learn/courses/30/lessons/150370?language=python3
문제의 핵심을 요약한다. 체계적인 문제 접근을 위해, 문제를 추상화한다
단순 구현 문제?
적합한 자료구조를 생각한다
# 1 --- # 2 --- # 3
추상화한 문제 이해를 기반으로 알고리즘의 대략적인 구현 계획을 서술한다
idea를 수도 코드로 작성해본다
today -> 비교할 수 있는 형태로 parse함 terms -> term_type to duration map으로 만들어서 O(1)으로 참조할 수 있도록 함 privacies:
알고리즘의 유효 여부를 구현 전에 검증한다 예제 입력을 수도 코드로 계산해보고, 놓친 알고리즘 오류가 있는지 확인한다
알고리즘의 유효 여부를 구현 전에 검증한다
예제 입력을 수도 코드로 계산해보고, 놓친 알고리즘 오류가 있는지 확인한다
python built-in datetime object는 기간 연산을 지원하지 않는다. datetime을 쓸 필요가 없다.
since_month + months_addiation > 12인 경우, year를 비교하려면 올림처리를 먼저 해줘야 한다
y,m,d 각각 비교는 코드도 비교적 길다
from datetime import datetime def solution(today, terms, privacies): answer = [] today_ymd = list(map(int, today.split('.'))) today_days = today_ymd[0] * 12 * 28 + today_ymd[1] * 28 + today_ymd[2] terms_map = {} for term in terms: term_type, months = term.split() terms_map[term_type] = int(months) for i, privacy in enumerate(privacies): since, term_type = privacy.split() since_ymd = list(map(int, since.split('.'))) due_days = since_ymd[0] * 12 * 28 + since_ymd[1] * 28 + since_ymd[2] months_addition = terms_map[term_type] due_days += months_addition * 28 if due_days <= today_days: answer.append(i+1) return answer
설계를 좀더 검증하고 수도 코드 작성 후 구현하자. 잘못 구현해서 재구현 삽질로 35분씩이나 걸림.
간단한 문제라도, 간단한 예제 입력을 3개 생각해보자.
Problem link
https://school.programmers.co.kr/learn/courses/30/lessons/150370?language=python3
Problem abstraction
단순 구현 문제?
Design(Plan) algorithm
Algorithm idea
Pseudo-code
today -> 비교할 수 있는 형태로 parse함 terms -> term_type to duration map으로 만들어서 O(1)으로 참조할 수 있도록 함 privacies:
Validate algorithm
python built-in datetime object는 기간 연산을 지원하지 않는다. datetime을 쓸 필요가 없다.
since_month + months_addiation > 12인 경우, year를 비교하려면 올림처리를 먼저 해줘야 한다
y,m,d 각각 비교는 코드도 비교적 길다
Impl
Self-feedback
구조적 접근: 문제를 추상화하여 구조적으로 접근했는가?
설계를 좀더 검증하고 수도 코드 작성 후 구현하자. 잘못 구현해서 재구현 삽질로 35분씩이나 걸림.
간단한 문제라도, 간단한 예제 입력을 3개 생각해보자.
사고력: 알고리즘을 완전히 이해했는가? (충분한 사고력을 가졌는가?)
구현력: 알고리즘을 신속, 정확하게 구현했는가?