[프로그래머스] Lv.1 신고 결과 받기

Tony Kim·2022년 1월 20일
0
post-thumbnail

프로그래머스

Lv.1 신고 결과 받기

1.문제

input id_list, report, k
output 중복을 제외하고 신고를 k 번 이상받은 id에 대해서, 몇 번의 신고통지를 받는지 list로 출력

2. 풀이

k번 이상 신고당한 id를 리스트에 넣고 해당 리스트를 신고한 id 신고통지 몇 번 받는지 for문과 if문 사용
-> runtime error

3. 코드

나의 풀이

def solution(id_list, report, k):
    answer = []
    temp = []
    y = []
    x = [] 
    # 중복제거
    report2 = list(set(report))
    # report2에서 신고당한 사람 temp에 저장
    for i in report2:
        temp.append(i.split()[1])
        if temp.count(i.split()[1]) == k:
            y.append(i.split()[1])
    for i in report2:
        if i.split()[1] in y:
            x.append(i.split()[0])
    for i in id_list:
        if i in x:
            answer.append(x.count(i))
        else:
            answer.append(0)
    return answer

모범코드

def solution(id_list, report, k):
    answer = [0] * len(id_list)
    dic_report = {id: [] for id in id_list} # 해당 유저를 신고한 ID
    for i in set(report):
        i = i.split()
        dic_report[i[1]].append(i[0])
    for key, value in dic_report.items():
        if len(value) >= k:
            for j in value:
                answer[id_list.index(j)] += 1
    return answer

반성)

  • 딕셔너리 구조를 사용하려했지만 초기화를 어떻게 하는지 몰랐음
  • i.split 따로 저장가능
  • 해당 값의 index를 구하려면 -> list.index(j) 활용
  • 여기서 list 값을 +=1 하기 위해서 0으로 초기화
    -> answer = [0] * len(id_list)
profile
Back-end-dev

0개의 댓글