https://school.programmers.co.kr/learn/courses/30/lessons/92334
1. 내가 작성한 코드
def solution(id_list, report, k):
fault = {} #신고를 당한 사람
result = [] #신고한 사람 전체
result1 = {} #메일 받을 횟수
for i in id_list:
fault[i] = []
result1[i] = 0
for i in set(report):
a,b = i.split()
fault[b].append(a)
for i in id_list:
if len(fault[i]) >=k:
result.append(fault[i])
for i in result:
for j in i:
result1[j] += 1
answer = list(result1.values())
return answer
50분이나 걸렸지만,, level1 이지만,, 카카오 문제 해결할 수 있다는 자신감을 좀 씩 얻고 있다,,
이 문제는 정확성 테스트로 제한시간이 10초가 있어서, 시간복잡도를 줄이는 것에 초점을 맞추고자 노력했다.
2. 알고리즘
def solution(id_list, report, k):
fault = {} #신고를 당한 사람
result = [] #신고한 사람의 전체
result1 = {} #메일 받을 횟수
for i in id_list:
fault[i] = []
result1[i] = 0
1. '신고를 당한 사람 : 신고를 한 사람'의 형식으로 딕셔너리를 만들어준다. #fault
2. k번 이상으로 신고를 당한 사람을 신고했던 모든 사람의 이름을 넣기 위해 list를 만들어준다 #result
2. 메일을 받을 횟수를 카운팅 하기위해 '이름 : 0'으로 딕셔너리를 만들어준다 #result1
for i in set(report):
a,b = i.split()
fault[b].append(a)
3. 같은 사람이 한 유저를 여러번 신고해도 신고 횟수는 1회로 처리하기 때문에 set(repot)를 해준다.
4. report 에 있는 원소의 형식이 [신고한사람, 신고당한사람] 이기 때문에 fault[신고당한사람].append(신고한사람) 으로 fault를 완성시켜준다.
for i in id_list:
if len(fault[i]) >=k:
result.append(fault[i])
5. fault key들 중, value의 길이가 k 이상이면 result 에 value(신고했던 사람)를 넣어준다.
for i in result:
for j in i:
result1[j] += 1
6. result에는 현재 2차원 배열의 형태로 저장되어 있으니, 2중 for문을 돌리고, key에 맞게 1번씩 올려주며 카운팅해준다.
ex) [['apeach', 'muzi'], ['muzi', 'frodo']]
ex) {'muzi': 2, 'frodo': 1, 'apeach': 1, 'neo': 0}
answer = list(result1.values())
return answer
7. result1의 모든 value를 list 형식으로 출력하면 통과된다.
3. 메모 (딕셔너리 value만 출력, key만 출력)
딕셔너리명.values()
딕셔너리명.keys()
를 이용해서 출력할 수 있다.
dic = {"a" : 1, "b": 2 }
print(dic.values())
print(dic.keys())
#dict_values([1, 2])
#dict_keys(['a', 'b'])
list로 변환시켜 주지 않으면 위와 같은 형태로 출력되기 때문에
dic = {"a" : 1, "b": 2 }
print(list(dic.values()))
print(list(dic.keys()))
#[1, 2]
#['a', 'b']
위와 같이 list()로 감싸서 출력해준다.
'🔅코딩테스트 공부🔅 > ❗프로그래머스(Lv.1)' 카테고리의 다른 글
[프로그래머스] Level1 문자열 나누기(python) (0) | 2023.02.13 |
---|---|
[프로그래머스] Level1 개인정보 수집 유효기간(python) (0) | 2023.02.12 |
[프로그래머스] Level1 성격 유형 검사하기(python) (0) | 2023.02.11 |
[프로그래머스] Level1 둘만의 암호(python) (0) | 2023.02.10 |
[프로그래머스] Level1 과일장수(python) (0) | 2023.02.09 |
댓글