Level 1 해시
문제 : https://programmers.co.kr/learn/courses/30/lessons/92334
접근 방법
이름을 key, 번호를 value로 하여 딕셔너리로 저장
각 ID 별로 2차원 배열을 생성 > reportList[i][j] i인덱스가 j인덱스를 신고를 했으면 1 안했으면 0
reportList를 같은 열끼리 더한 것이, k를 넘으면 reportList[i][j]가 1인 것만 answer[i] 1증가
def findIdx(dic, name):
idx = dic[name]
return idx
def connetIdIdx(id_list):
dic = {}
for i in range(len(id_list)):
dic[id_list[i]] = i
return dic
def solution(id_list, report, k):
answer = [0]*len(id_list)
#[report 보낸 수, report 받은 수] 보냈으면 1, 안보냈으면 0
reportList = [[0]*len(id_list) for _ in range(len(id_list))]
dic = connetIdIdx(id_list)
# 신고 당한 횟수 세기
reportCntList = [0] * len(id_list)
for re in report:
str1, str2 = map(str, re.split())
reporter = findIdx(dic, str1)
reported = findIdx(dic, str2)
if not reportList[reporter][reported]:
reportList[reporter][reported] = 1
for i in range(len(id_list)):
for j in range(len(id_list)):
reportCntList[i] += reportList[j][i]
for i in range(len(reportCntList)):
if reportCntList[i] >= k:
for j in range(len(reportCntList)):
if reportList[j][i]:
answer[j] += 1
return answer
최적화 풀이
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
후기
처음에 쉬운 문제인 줄 알고 덥석 풀었는데 그래도 난이도가 있었습니다. 문제가 번호가 아닌 이름으로 주어져서 이를 처리하는데 조금 헤맸습니다.
딕셔너리를 처음 쓰다보니 검색을 하면서 풀었고 제가 새롭게 알게된 부분을 정리해보려고 합니다.
딕셔너리는 다른 자료형과 다르게 append로 추가하는 것이 아니라 = 연산자로 값을 추가합니다.
a = {}
a[key] = value
테케가 모두 맞았을 때 기분은 좋았는데 다른사람의 최적화된 풀이를 보니 너무 현타가 왔습니다.
제가 새롭게 배운 부분을 정리해볼까 합니다.
# 각 유저 ID를 key값으로 하고, value는 0으로 초기화
reports = {x : 0 for x in id_list}
# 리스트를 set변수에 넣어 중복값을 없앰
# 신고당한 id를 뽑아 신고당한 수 1 증가
for r in set(report):
reports[r.split()[1]] += 1
# id_list.index(n) : id_list 리스트에서 n의 인덱스 반환
for r in set(report):
if reports[r.split()[1]] >= k:
answer[id_list.index(r.split()[0])] += 1
return answer
'ProblemSolving > Hash' 카테고리의 다른 글
프로그래머스 베스트앨범 (파이썬) (0) | 2022.05.05 |
---|---|
프로그래머스 위장 (파이썬) (0) | 2022.05.03 |
프로그래머스 전화번호 목록 (파이썬) (0) | 2022.05.03 |
프로그래머스 완주하지 못한 선수 (파이썬) (0) | 2022.05.03 |