250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 알고리즘
- onClick
- Display
- itertools
- cte
- target
- vscode
- AI
- Level1
- 함수실행시간
- python
- 프로그래머스
- AI 5기
- googlesheet
- sql
- position
- Iterator
- WIL
- with\
- iterable
- 우선순위
- time()
- 가상환경
- venv
- 함수성능평가
- A태그
- 내일배움캠프
- git #github #내일배움캠프
- googleappscript
- gitignore
Archives
- Today
- Total
05의 개발 계발
[알고리즘] 230426 개인정보 수집 유효기간 본문
728x90
내 코드
def solution(today, terms, privacies):
#오늘 날짜를 년,월,일 로 받은 후 → 일단위로 변환하여 저장
[year,month,day] = today.split(".")
today = sum([int(year)*12*28,int(month)*28,int(day)])
#약관종류와 유효기간이 쌍값 → dict저장 + 유효기간은 일단위로
terms_dict = {}
for term in terms:
typ,exp = term.split(" ")
terms_dict[typ] = int(exp)*28
#파기목록 선언
expired_list = []
#개인정보 수집일자와 약관종류 분리
for i,privacie in enumerate(privacies,1):
day,typ = privacie.split(" ")
#수집일자 일단위로 변환
[year,month,day] = day.split(".")
day = sum([int(year)*12*28,int(month)*28,int(day)])
#약관종류 별 유효성 판별하여 파기목록에 추가
for typ_,exp in terms_dict.items():
if typ == typ_:
if (today-day) >= exp:
expired_list.append(i)
return expired_list
+테스트용 코드
더보기
import os
os.system("cls")
def solution(today, terms, privacies):
#오늘 날짜를 년,월,일 로 받은 후 → 일단위로 변환하여 저장
[year,month,day] = today.split(".")
today = sum([int(year)*12*28,int(month)*28,int(day)])
#약관종류와 유효기간이 쌍값 → dict저장 + 유효기간은 일단위로
terms_dict = {}
for term in terms:
typ,exp = term.split(" ")
terms_dict[typ] = int(exp)*28
#파기목록 선언
expired_list = []
#개인정보 수집일자와 약관종류 분리
for i,privacie in enumerate(privacies,1):
day,typ = privacie.split(" ")
#수집일자 일단위로 변환
[year,month,day] = day.split(".")
day = sum([int(year)*12*28,int(month)*28,int(day)])
#약관종류 별 유효성 판별하여 파기목록에 추가
for typ_,exp in terms_dict.items():
if typ == typ_:
if (today-day) >= exp:
expired_list.append(i)
return expired_list
# ===============테스트공간==================
today1="2022.05.19"
terms1=["A 6", "B 12", "C 3"]
privacies1=["2021.05.02 A", "2021.07.01 B", "2022.02.19 C", "2022.02.20 C"]
#[1, 3]
today2="2020.01.01"
terms2=["Z 3", "D 5"]
privacies2=["2019.01.01 D", "2019.11.15 Z", "2019.08.02 D", "2019.07.01 D", "2018.12.28 Z"]
#[1, 4, 5]
print("정답[1, 3] |",solution(today1, terms1, privacies1))
print("정답[1, 4, 5] |",solution(today2, terms2, privacies2))
#리팩토링 | 직관적으로 변수 수정 , 공통적인 일단위 변환 함수화
def solution(today, terms, privacies):
def to_day(date_str):
# 날짜 문자열을 일단위 정수로 변환하는 함수
year, month, day = map(int, date_str.split("."))
return year * 12 * 28 + month * 28 + day
today_day = to_day(today)
term_dict = {typ: int(exp) * 28 for typ, exp in (term.split() for term in terms)}
expired_list = []
for i, privacy in enumerate(privacies, 1):
date_str, typ = privacy.split()
privacy_day = to_day(date_str)
if (today_day - privacy_day) >= term_dict.get(typ, 0):
expired_list.append(i)
return expired_list
흠터레스팅 코드
# map활용 슬라이싱활용
def to_days(date):
year, month, day = map(int, date.split("."))
return year * 28 * 12 + month * 28 + day
def solution(today, terms, privacies):
months = {v[0]: int(v[2:]) * 28 for v in terms}
today = to_days(today)
expire = [
i + 1 for i, privacy in enumerate(privacies)
if to_days(privacy[:-2]) + months[privacy[-1]] <= today
]
return expire
새로 알게된 것
함수 내에서도 반복되는 변환이 있다면 내장함수를 정의하여 활용하는 것도 좋은 방법이다.
728x90
'알고리즘' 카테고리의 다른 글
[알고리즘] 230419 점의 위치 구하기 | if , 삼항연산자 , bool type (0) | 2023.04.19 |
---|---|
[알고리즘] 230408 완주하지 못한 선수 collection.Counter() / return의 성질 (0) | 2023.04.09 |
[알고리즘] [Python] 배열 두 배 만들기 (0) | 2023.04.03 |
[알고리즘] [Python] 최빈값 구하기 (0) | 2023.04.02 |