Love Every Moment

〔프로그래머스/파이썬〕신고 결과 받기 (+딕셔너리 컴프리헨션 사용법) 본문

PROGRAMMING::LANGUAGE/Python

〔프로그래머스/파이썬〕신고 결과 받기 (+딕셔너리 컴프리헨션 사용법)

해 송 2022. 7. 1. 20:35
반응형

 

출처

 

코딩테스트 연습 - 신고 결과 받기

문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의

programmers.co.kr

 


 

가장 추천 많이 받은 풀이

def solution(id_list, report, k):
    answer = [0] * len(id_list)    
    reports = {x : 0 for x in id_list}

    for r in set(report):
        reports[r.split()[1]] += 1

    for r in set(report):
        if reports[r.split()[1]] >= k:
            answer[id_list.index(r.split()[0])] += 1

    return answer
  • 내가 직접 풀었던 풀이는 시간 초과가 떠서 부분 실패했다
  • 다른 사람의 풀이 중에서 가장 추천을 많이 받은 풀이를 보고 공부가 많이 되었다
  • 여기서 새로 배운 것은 3번째 라인의 reports 에서 쓰인 딕셔너리 컴프리헨션 사용법!

 

추천 풀이 응용한 나의 풀이

def solution(id_list, report, k):
    report = set(report)
    # 신고 당한 횟수 딕셔너리(사람 : 신고 당한 횟수)
    reported_nums = {x: 0 for x in id_list}
    # 정지 당한 사람 리스트
    banned = list()
    # 메일 받은 횟수 리스트
    answer = [0] * len(id_list)
    
    for i in report :
        reporter, reported = i.split()
        reported_nums[reported] += 1
        if reported_nums[reported] == k :
            banned.append(reported)
    
    for i in report :
        reporter, reported = i.split()
        if reported in banned :
            answer[id_list.index(reporter)] += 1
    return answer

 


 

딕셔너리 컴프리헨션

# list comprehension
>>> [ x+y for x in range(10) for y in range(10) ]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]

# set comprehension
>>> { x+y for x in range(10) for y in range(10) }
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18}

# dictionary comprehension
>>> students = ['철수', '영희', '길동', '순희']
>>> { student: 0 for student in students }
{'철수': 0, '영희': 0, '길동': 0, '순희': 0}
  • 기존에 알고있는 리스트 컴프리헨션 사용법과 동일하지만, 대괄호[] 대신에 중괄호{} 를 사용하면 set comprehension
  • 여기서 중괄호{} 를 이용하면서 key : value 의 형태로 내용을 채운다면 dictionary comprehension
  • collections 모듈의 defaultdict 와 유사한 역할을 하지만, 딕셔너리 컴프리헨션은 0이 아닌 값을 지정할 수 있어서 좋다

 

 

2) 딕셔너리 컴프리헨션

리스트 컴프리헨션은 다른 자료구조로도 확장이 되었습니다 리스트를 만들때 사용했던 컴프리헨션문법을 중괄호를(`{}`) 이용해서 한다면 `set comprehension`이 ...

wikidocs.net

 

반응형
Comments