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 | 31 |
Tags
- 22938번
- 프론트엔드
- jquery
- 코딩기초트레이닝
- 무료강의
- 네이버커넥트재단
- useState
- MongoDB
- css
- django multi image
- 프로그래머스
- 스파르타코딩클럽
- error
- 반응형
- 장고 다중이미지
- 장고이미지처리
- ㅐㄱ이
- html
- 프로그래머스입문
- GIT
- 파이썬무료강의
- 참가후기
- python
- 스파르타
- 파이썬
- React
- SEF2022
- sql
- 개인정보수집유효기간
- 20492번
Archives
- Today
- Total
코딩,해볼까
08.20. 프로그래머스 : 개인정보 수집 유효기간 🔥 본문
🔎 개인정보 수집 유효기간
기간을 비교하여 파기할 개인정보를 return 한다.
약관 종류마다 다른 유효기간.
입력값 개인정보 수집 일자에 약관 종류별 기간을 더해서 오늘 날짜와 비교해 파기할 개인정보인지 알아낸다.
파기해야 하는 정보면 answer에 append해서 오름차순으로 return 한다.
▶ 테스트 마다 모든 입력값들이 변화한다.
▶ 모든 달은 28일까지 있다.
< 입력값 >
오늘 날짜 today = (2022.05.19)
약관 종류와 유효기간 terms = ['A 6', 'B 12', 'C 3']
개인정보 수집 일자와 약관 종류 privacies = ["2019.01.01 D", ...]
💡 문제풀이과정..
< 풀이방법 >
1. 프라이버시를 시간 / 알파벳으로 나눈다..?
2. terms의 숫자들을 시간적 연산으로 바꿔준다.
3. 프라이버시의 알파벳과 terms의 알파벳을 매치하여 프라이버시 숫자에 더해준다.
4. 3번 숫자와 today 숫자를 비교하여 3번 숫자가 더 크면 answer에 append한다.
# for문 2개를 이용하여 리스트 안에서 terms와 알파벳 위치를 맞춰줬다.
for i in privacies:
answer.append(i.split()) # answer = [i.split() for i in privacies]
for i in answer:
i.reverse()
# for문 하나로 줄였다.
for i in range(len(privacies)):
answer.append(privacies[i].split())
answer[i].reverse()
def solution(today, terms, privacies):
result = []
answer = []
for i in range(len(privacies)):
answer.append(privacies[i].split())
answer[i].reverse()
terms = [i.split() for i in terms]
for i in range(len(answer)):
for a in range(len(terms)):
...
* 일>월>년 으로 계산해야 한다고 생각했는데, 월(달) 이 주어지는 것이기 때문에 월>년 만 하면 되지 않을까? 생각했지만 일까지 계산해야만 했다.
#1. (실패) 알파벳이 terms[i][0], terms[i][1] 중 누구와 같은지 [알파벳, 숫자] / [알파벳, 기간]
['Z', 84] / ["D","2019.01.01"]
terms와 privacies(내 풀이에서는 answer) 길이가 같지 않아서 range와 for문을 같이 사용하지 못하고 오류가 났다.
#2. (이중 for 문으로 변경했다.) 두 for 문에서 같은 알파벳을 찾으면, [i][1] 의 숫자를 불러오도록 한다.
( + dict로 풀었으면 더 좋았을 것 같다.)
for i in range(len(answer)):
for a in range(len(terms)):
if answer[i][0] == terms[a][0]:
date = answer[i][1]
# print(date) 2019.01.01
date = date.split(".")
print(date)
...
💡 문제풀이#2
def solution(today, terms, privacies):
result = []
answer = []
# ['A', '2020.00.00'}
for i in range(len(privacies)):
answer.append(privacies[i].split())
answer[i].reverse()
# ['A', '5']
terms = [i.split() for i in terms]
# 알파벳이 같으면 date에 개인정보 수집 일자를 저장하고, 거기에 유효기간을 더하여 만료 일자를 알아낸다.
for i in range(len(answer)):
for a in range(len(terms)):
if answer[i][0] == terms[a][0]:
date = answer[i][1]
date = date.split(".")
term_plus = int(date[1]) + int(terms[a][1])
# 년, 월, 일 에 따라서 연산한다.
if term_plus > 12:
Y = int(date[0]) + (term_plus // 12)
M = term_plus % 12
else:
Y = int(date[0])
M = int(date[1]) + int(terms[a][1])
date.pop(0)
date.pop(0)
date.insert(0, str(Y))
date.insert(1, str(M))
D = int(date[2]) - 1
if D == 0:
M = int(date[1]) - 1
D = 28
if M == 0:
Y = int(date[0]) - 1
M = 12
date = []
date.append(Y)
date.append(M)
date.append(D)
today_y = int(today[:4])
today_m = int(today[5:7])
today_d = int(today[8:])
if int(date[0]) > today_y:
pass
elif int(date[0]) < today_y:
result.append(i + 1)
else:
if int(date[1]) > today_m:
pass
elif int(date[1]) < today_m:
result.append(i + 1)
else:
if int(date[2]) > today_d:
pass
elif int(date[2]) < today_d:
result.append(i + 1)
return result
'Back > TIL' 카테고리의 다른 글
08.22. 프로그래머스 : 로또의 최고 순위와 최저 순위 (0) | 2023.08.22 |
---|---|
DFS : 깊이 우선 탐색 (1) | 2023.08.21 |
08.18. 프로그래머스 : 둘만의 암호 (0) | 2023.08.19 |
08.19. 프로그래머스 : 피보나치 수 (0) | 2023.08.19 |
08.17. 프로그래머스 : 신규 아이디 추천 (0) | 2023.08.17 |
Comments