[Python] 프로그래머스 - 92334번 : 신고 결과 받기 (.split()의 문법 다시 숙지!)

ossap·2022년 5월 17일
0

🤔 [Python] 문제 풀기

목록 보기
11/11

알고리즘 스터디를 진행하며 문제를 풀다가,
split()의 문법을 다시 한 번 숙지하고자 오랜만에 포스팅을 하게 되었다..!

문제

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

문제 설명

신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다.

  • 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.
    - 신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다.
    - 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다.
  • k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다.
    - 유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다

자세한 문제 예시는 여기서 보세욥 😉


풀이

🙋내 풀이

내 코드는 이렇다.

def solution(id_list, report, k):
    answer = []
    result = {id : [0,set()] for id in id_list}
    for rpt in report:
        who, whom = rpt.split()
        if whom not in result[who][1]:
            result[who][1].add(whom)
            result[whom][0] += 1

    for id in id_list:
        cnt = 0
        for p in result[id][1]:
            if result[p][0] >= k:
                cnt += 1
        answer.append(cnt)  
    return answer

✅구조

result 딕셔너리 = {사용자1 : [신고받은 횟수, set(신고한 사람들)], 사용자 2 : ....}

이렇게 딕셔너리 구조를 생각하고, report를 돌면서 정보를 위치에 맞게 저장했다.

그리고 나서

  1. id_list 순으로 result에서 그 사용자를 검색한다.
  2. 그사람이 신고한 사용자들( 중 신고받은 횟수가 k번 이상인 경우 카운트를 해서 k번 이상인경우 그만큼 answer에 카운트값을 추가한다.



사실 근데 처음부터 report안의 원소를 원소.split()으로 활용하고 싶었는데.. 잘 안되고 에러가 났다 ㅠㅠ...

그런데 풀고 다른사람의 풀이를 보니 넘나 깔끔하게 split을 활용하셔서...
이걸 기억하고 다음에 꼭 틀리지 않고 써먹기 위해 기록한다 !

🧑‍💻 다른 사람의 풀이

그 ✨멋지구리한 코드✨는 이렇다...!

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

정말 아름다운 코드... 프로그래머스는 정말 보면서 배우는게많다...
어쨌든..! set을 일일히 만들어서 딕셔너리 안에 넣 필요가 없었다..!

이렇게 하고 싶었는데.... 나도 생각했는데... (아쉽)

이번엔 못 짰지만, 다음엔 짤 수 있기를..!



아직도 기본적인 문법 에러가 날 때 마다 정말 내 자신이... 화난다...
언제쯤 Invalid Syntax를 안 볼 수 있는 것인가...

profile
오삽 : 오늘도 삽질

0개의 댓글