https://school.programmers.co.kr/learn/courses/30/lessons/150370
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)
'🔅코딩테스트 공부🔅 > ❗프로그래머스(Lv.1)' 카테고리의 다른 글
[프로그래머스] Level1 숫자 문자열과 영단어(python) (0) | 2023.02.13 |
---|---|
[프로그래머스] Level1 문자열 나누기(python) (0) | 2023.02.13 |
[프로그래머스] Level1 신고 결과 받기(python) (0) | 2023.02.11 |
[프로그래머스] Level1 성격 유형 검사하기(python) (0) | 2023.02.11 |
[프로그래머스] Level1 둘만의 암호(python) (0) | 2023.02.10 |
댓글