알고리즘 문제 풀이/프로그래머스

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

2023. 7. 10. 14:29
목차
  1. 문제 설명
  2. 구현 과정
  3. 틀린 코드
  4. 맞춘 코드
  5. 다른 사람의 풀이

문제 설명

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

구현 과정

설계 과정

신고할 경우 정지당한 사람에게 메일이 가는 것이 아니라
신고한 사람에게 당신이 신고한 사람이 정지가 되었다고 메일이 가야하는 구조
    
자료구조는 dictinary를 기반으로 가져가는 것이 좋을듯함.
    
 d_list로 for문을 돌려 딕셔너리를 생성한다.
report를 한바퀴 돌려서(신고당한 사람에 초점을 맞춘다) 각 사람별 신고된 횟수를 저장한다.(중복 신고되지 않게 해야함)
report를 한번 더 돌려서(신고한 사람에 초점을 맞춘다) 신고한 사람이 정지되었다면 result에 카운트를 증가시킨다.

틀린 코드

  • 초기 구현한 코드이다. 테스트는 통과했지만 실제 제출에서 거의 다 틀린 코드이다.
  • 반복문이 많이 사용되었기에, 좋지 않은 코드기도 하고, 어느부분에서 틀렸는지 파악이 어려운 코드이다.
def solution(id_list, report, k):
    answer = {}
    report_check = {}
    for i in id_list:
        answer[i] = 0
        report_check[i] = [0 for i in range(len(id_list))]
    for j in report:
        report_check[j.split()[1]][id_list.index(j.split()[0])] = 1
    for j in report:
        if sum(report_check[j.split()[1]]) >=k:
            answer[j.split()[0]] +=1
    return list(answer.values())

맞춘 코드

풀이 방법에 대해 고민하다 떠올리지 못하여 다른사람의 코드를 확인해봤다.

set을 사용하여 중복처리를 한다는 개념만 주워서 코드를 작성해봤다. 

def solution(id_list, report, k):
    answer = {i : 0 for i in id_list}
    check = {i : 0 for i in id_list}
    
    for j in set(report):
        x,y = j.split()
        check[y] +=1
        
    for t in set(report):
        x,y = t.split()
        if check[y] >=k:
            answer[x] +=1
    return list(answer.values())

다른 사람의 풀이

이 코드의 아이디어를 보고 작성했다 보니 나의 코드와 거의 유사함을 볼 수 있다. 내 코드보다 더 간결한 느낌이다.

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

    for r in set(report):
        a,b = r.split()
        reported[b] += 1

    for r in set(report):
        a,b = r.split()
        if reported[b] >= k:
            answer[id_list.index(a)] += 1

    return answer

'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] 피로도 - python[DFS]  (3) 2023.07.27
[프로그래머스] 숫자 문자열과 영단어 - python[문자열]  (2) 2023.07.10
프로그래머스 정수 삼각형  (0) 2023.04.10
프로그래머스 점프와 순간 이동  (0) 2023.03.31
프로그래머스 구명보트 파이썬  (0) 2023.03.28
  1. 문제 설명
  2. 구현 과정
  3. 틀린 코드
  4. 맞춘 코드
  5. 다른 사람의 풀이
'알고리즘 문제 풀이/프로그래머스' 카테고리의 다른 글
  • [프로그래머스] 피로도 - python[DFS]
  • [프로그래머스] 숫자 문자열과 영단어 - python[문자열]
  • 프로그래머스 정수 삼각형
  • 프로그래머스 점프와 순간 이동
잘잔디
잘잔디
4학년이 되고 취업 준비를 위해 2023-01-01부터 공부한 내용을 정리한 블로그입니다.
잘잔디
MBCS 공부일지
잘잔디
전체
오늘
어제
  • 분류 전체보기 (217)
    • 파이썬 (28)
      • 파이썬 이론 (8)
      • NumPy (3)
      • Pandas (6)
      • 파이썬 시각화 (8)
      • 응용 (2)
    • Java (3)
    • Back (38)
      • DataBase이론 (12)
      • MySQL (2)
      • JSP (8)
      • JSTL (2)
      • Spring (0)
      • Django (8)
      • MongoDB (6)
      • FastAPI (0)
    • Front (8)
      • HTML (3)
      • CSS (2)
      • JS (1)
    • 회고록 (10)
    • 알고리즘 문제 풀이 (95)
      • 알고리즘 이론 공부 (14)
      • 프로그래머스 (69)
      • 백준 (12)
    • 머신러닝 (0)
    • 딥러닝 (0)
    • Git (3)
    • R 프로그래밍 (3)
    • 빅데이터 관리 (16)
      • 리눅스 (4)
      • Hadoop (12)
    • AWS (2)
    • 일상 (10)
      • 책 리뷰 (5)
      • TOEIC (2)
      • 자잘하게 공부한 것들 (2)
    • 사이버보안 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • HTML
  • Java
  • Database
  • backend
  • 즐거웠다
  • 골드
  • web
  • 백준
  • playdata
  • 객체지향
  • JavaScript
  • 독산역
  • OOP
  • db
  • 이중우선순위 큐
  • CSS
  • git
  • JS
  • Encore

최근 댓글

최근 글

hELLO · Designed By 정상우.
잘잔디
[프로그래머스] 신고 결과 받기 - python[Hashing]
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.