🔅코딩테스트 공부🔅/❗프로그래머스(Lv.1)
[프로그래머스] Level1 개인정보 수집 유효기간(python)
윤무무
2023. 2. 12. 17:51
https://school.programmers.co.kr/learn/courses/30/lessons/150370
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 내가 작성한 코드
제가 짠 코드는 넘나리 더러워서,, 다른 분이 푼 걸 참조하길 추천드려여,,
저도,,나주엥,,,다시풀어봐야하걸랑요,,,
def solution(today, terms, privacies):
term = {} #이용약관 딕셔너리 형태로 재구성
pr1 = [] #날짜
pr2 = [] #약관종류
answer = [] #파기해야할 index
for i in terms:
a,b = i.split()
term[a] = int(b) * 28
today = (list(map(int,today.split(".")))) #today list로 재구성 [0] yy [1] mm [2] dd
for j in privacies:
a,b = j.split()
pr1.append(list(map(int,a.split("."))))
pr2.append(b)
for k in range(len(pr1)): #유효기간
if (pr1[k][2] + term[pr2[k]]-1)% 28 != 0:
result = pr1[k][2] + term[pr2[k]] -1
result1 = ((result // 28) + pr1[k][1])
pr1[k][2] = (pr1[k][2] + term[pr2[k]] -1) % 28 #DD
if (result1 % 12) == 0:
pr1[k][1] = 12
pr1[k][0] += (result // 28) // 12
else:
pr1[k][1] = ((result // 28) + pr1[k][1]) % 12 #MM
pr1[k][0] += (result1 // 12) #YY
else:
result2 = ((term[pr2[k]] // 28) + pr1[k][1] - 1)
pr1[k][2] = 28
if ((term[pr2[k]] // 28) % 12) == 0:
pr1[k][1] = 12
pr1[k][0] += (term[pr2[k]]// 28) // 12
else:
pr1[k][1] = ((term[pr2[k]] // 28) + pr1[k][1] - 1) % 12
pr1[k][0] += (result2 // 12)
for i in range(len(pr1)):
if pr1[i][0] < today[0]:
answer.append(i+1)
elif pr1[i][0] == today[0] and pr1[i][1] < today[1]:
answer.append(i+1)
elif pr1[i][0] == today[0] and pr1[i][1] == today[1] and pr1[i][2] < today[2]:
answer.append(i+1)
answer.sort()
print(pr1)
return answer
2. 문제 해결 알고리즘
1. 약관 종류를 day로 바꿔서 딕셔너리 만들기
(모든 달이 28일이라고 정해졌기 때문에 *28)
for i in terms:
a,b = i.split()
term[a] = int(b) * 28
# {'A': 168, 'B': 336, 'C': 84}
2. today를 list로 재구성
today = (list(map(int,today.split("."))))
#[2020, 1, 1]
3. privacies의 값을 개인정보 수집 일자 / 약관 종류로 구분해서 다른 list에 삽입
for j in privacies:
a,b = j.split()
pr1.append(list(map(int,a.split("."))))
pr2.append(b)
#[[2021, 5, 2], [2021, 7, 1], [2022, 2, 19], [2022, 2, 20]]
#['A', 'B', 'C', 'C']
4.
딱봐도 어지러워서 설명할 힘도 안난다리,, 미래의 나야 잘 해석해봐
for k in range(len(pr1)): #유효기간
if (pr1[k][2] + term[pr2[k]]-1)% 28 != 0:
result = pr1[k][2] + term[pr2[k]] -1
result1 = ((result // 28) + pr1[k][1])
pr1[k][2] = (pr1[k][2] + term[pr2[k]] -1) % 28 #DD
if (result1 % 12) == 0:
pr1[k][1] = 12
pr1[k][0] += (result // 28) // 12
else:
pr1[k][1] = ((result // 28) + pr1[k][1]) % 12 #MM
pr1[k][0] += (result1 // 12) #YY
else:
result2 = ((term[pr2[k]] // 28) + pr1[k][1] - 1)
pr1[k][2] = 28
if ((term[pr2[k]] // 28) % 12) == 0:
pr1[k][1] = 12
pr1[k][0] += (term[pr2[k]]// 28) // 12
else:
pr1[k][1] = ((term[pr2[k]] // 28) + pr1[k][1] - 1) % 12
pr1[k][0] += (result2 // 12)
5. TODAY보다 '개인정보수집일자 + 약관 기간'이 빠르면 그 인덱스를 append해줌
이걸 어케 줄일 수 있을까.. 미래의 나야 고민해봐..
for i in range(len(pr1)):
if pr1[i][0] < today[0]:
answer.append(i+1)
elif pr1[i][0] == today[0] and pr1[i][1] < today[1]:
answer.append(i+1)
elif pr1[i][0] == today[0] and pr1[i][1] == today[1] and pr1[i][2] < today[2]:
answer.append(i+1)