프로그래머스 92334

프로그래머스 92334. 신고 결과 받기

신고 결과 받기 문제를 풀면서 얻어갈 수 있는 것들이 무엇이 있는지 살펴보고 뜯어 먹어보자. 간단한 문제이지만 다양한 상황에 쓰일 수 있는 유용한 기본 스킬들을 배울 수 있다.

얻어 가야 하는 것

요즘 파이썬을 공부하면서 파이썬으로 알고리즘 문제를 풀어보고 있는데, 속도는 느리지만 정말 편리한 언어라는 것을 느끼고 있다. 기본적인 내용이지만 숙지하여 적재적소에 활용하도록 하자.

간편한 초기화

  • Python 3
    » { x : 0 for x in key_list }
      - 모든 key에 대해 0으로 초기화하는 코드
    » [0] * len(param)
      - param 길이 만큼의 리스트를 0으로 초기화하는 코드
    » [[0]len(param) for i in range(len(param))]
      - param 길이 x param길이 사이즈의 2차원 리스트를 0으로 초기화하는 코드

데이터 중복 제거

  • Python 3
    » set
      - set 은 자료의 순서를 보장하지 않으며, 중복을 허락하지 않는 자료형이다. (2.3부터 지원)
      - set(list) : list에 중복되는 요소가 있는 경우 중복을 제거한 집합을 만든다.
      - add, remove, update, 합집합, 교집합, 차집합 등의 연산을 지원한다.
      - 비어있는 집합을 만들어서 add, update 할 수도 있지만, 선언할 때부터 리스트를 넣어주는 방법도 있다.

특정 요소의 인덱스 구하기

  • Python 3
    » id_list.index(id)
      - id가 저장된 인덱스를 반환한다.

프로그래머스 92334 문제 링크 및 핵심 아이디어

https://programmers.co.kr/learn/courses/30/lessons/92334

  • 처리 결과 메일을 받은 횟수를 배열에 담아 리턴하는 함수를 만드는 문제다.
  • 처리 결과 메일을 받으려면 내가 신고한 유저가 k번 이상 신고를 당해야 한다.
    • 답을 구하기 위해 알아야 하는 것
      – 어떤 유저가 누구를 신고했는지?
      – 누가 신고를 몇 번 당했는지?

  • set을 사용해 한 명이 같은 이용자를 여러 번 신고한 케이스를 제거할 수 있다.
  • dict 자료형을 각 이용자가 신고 당한 횟수를 카운팅 하는 데 활용할 수 있다.

풀이

def solution(id_list, report, k):
    reported_cnt = {x:0 for x in id_list}
    received_mail_cnt = [0] * len(id_list)
    
    for r in set(report):  # report 형식 : '이용자id 신고한id'
        reported_cnt[r.split()[1]] += 1
            
    for r in set(report):
        if reported_cnt[r.split()[1]] >= k:
            received_mail_cnt[id_list.index(r.split()[0])] += 1
    
    return received_mail_cnt
스스로 경험하며 얻은 깨달음을 공유하기 좋아하며, 세상이 필요로 하는 코드를 작성하기 위해 노력하는 개발자입니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다