[Python]프로그래머스 - 신고 결과 받기

OneTwoZero·2022년 6월 28일
0

코딩테스트

목록 보기
1/1
문제말고 공부 기록만 올린다!

구성해야할 부분을 먼저 정리해보자
1. 유저는 한번에 한명의 유저를 신고할 수 있다
2. 신고횟수는 제한이 없다.
3. 한 유저를 여러번 신고가 가능하지만, 동일 유저 신고횟수는 1회로 처리
4. K번 이상 신고된 유저는 게시판 이용이 정지됨
5. 해당 유저를 신고한 모든 유저에게 정지 사실 메일로 발송

기본적으로 알고 지나가야할 부분

  • defaultdic , dictionary 가 있는데 둘의 차이를 알고 사용해보자

  • 사용해야하는 이유는 유저의 id와 신고당한 사람의 id를 하나로 연결해두어야기 때문에 우리는 key, value 값을 연결해 주어야함

  • defaultdic은 dict의 차이가 뭘까?

# dictionary를 사용할 경우 KeyError 에 대해서 except 하는 부분이 필요하다
# key 값이 없거나 없는 key를 조작하려고 할 때 keyerror가 발생 

dict_by_count = dict()

for i in dict_example:
	t, z = i[0:2]
    try:
        dict_by_count[z].append(t)
    except KeyError:
        dict_by_count[z] = [t]
  • 위와 같은 경우를 보완한 것이 defaultdict이다
  • 기존 클래스의 다른점은 하나의 메소드와 쓸 수 있는 인스턴트 변수라는데 이게 무슨 말일까?
  • defaultdict에는 사용자가 없는 key 값을 조작할 때 값이 없다면 자체적으로 defualt 값을 생성하면서 초기값을 내뱉어주는 아주 똑똑한 친구다!
  • 단, defaultdict를 선언할 때 default_factory라는 인자를 필요로 함
from collections import defaultdict 

dict_by_count = defaultdict(list) # int, float, set , list 자료형,자료구조 모두가능

for i in dict_example:
	t, z = i[0:2]
    dict_by_count[z].append(t)

위에서 생각한 구성해야할 부분을 좀 더 구체적으로 아아니 코딩적으로 고민해보는 시간
1. 유저는 한번에 한명의 유저를 신고할 수 있다
2. 신고횟수는 제한이 없다.
3. 한 유저를 여러번 신고가 가능하지만, 동일 유저 신고횟수는 1회로 처리

  • report 를 set()으로 변환해준다
  • set()은 집합: 반복가능, 가변적, 중복요소 없음 정렬되지 않은 데이터 타입
  1. K번 이상 신고된 유저는 게시판 이용이 정지됨
  • 신고당한 횟수 저장 : cnt
  1. 해당 유저를 신고한 모든 유저에게 정지 사실 메일로 발송
  • 신고한 유저와 신고 당한 유저를 한번에 저장 user_list

나는 너무 어렵게 생각했나보다!!
다른 사람 풀이를 보니,,,,,

# id_list = ["muzi", "frodo", "apeach", "neo"]

def solution(id_list, report, k):
    answer = [0] * len(id_list)  # id_list 크기만큼 0 list 생성  [0, 0, 0, 0]
  
    reports = {x : 0 for x in id_list} # {'muzi': 0, 'frodo': 0, 'apeach': 0, 'neo': 0}

    for r in set(report):
        reports[r.split()[1]] += 1
        # {'muzi': 1, 'frodo': 2, 'apeach': 0, 'neo': 2} 각각 몇번 신고 당했는지

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

    return answer # 메일 각 User 당 몇번 받았는지
profile
3D, SLAM, DL, ML

0개의 댓글