코딩테스트/프로그래머스

[프로그래머스] [Level 1] 신고 결과 받기

박소민 2022. 2. 3. 22:17
문제: 신고 결과 받기
 

코딩테스트 연습 - 신고 결과 받기

문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의

programmers.co.kr

 

  • 내 풀이
def solution(id_list, report, k):
    n=int(len(id_list))
    count=[0]*n    #각 id당 신고당한 횟수
    answer=[0]*n   #각 id당 받을 메일 횟수
    p_result=''    #정지당한 id 담을 변수
    #신고당한 id저장할 변수
    p_id=[[] for i in range(n)]
    
    for r in report:
    	#신고자 id, 신고당한 id
        q,p=r.split()
        #id_list의 인덱스 값
        q_index=id_list.index(q)
        p_index=id_list.index(p)
        
        #같은 신고자가 이전에 동일한 id 신고한 적이 없을 경우에만 실행
        if p not in p_id[q_index]:
            count[p_index]+=1 
            p_id[q_index].append(p)  #신고자 id의 인덱스 위치에 신고 당한 id 저장
    
    for i in range(n):
    	#정지 기준 횟수를 넘으면 실행
        if count[i]>=k:
            p_result=id_list[i]
            
            #정지당한 id를 신고한 id들 찾아서 메일 전송 횟수 +1
            for j in range(n):
                if p_result in p_id[j]:
                    answer[j]+=1
    return answer

→ 신고자 id의 인덱스 위치에 신고한 id들을 값으로 넣음

 

 

  • 다른 사람 풀이
def solution(id_list, report, k):
    answer = [0] * len(id_list)
    #딕셔너리 자료형 key값만 지정
    dic_report = {id: [] for id in id_list} # 해당 유저를 신고한 ID
    for i in set(report):
        i = i.split()
        #신고당한 id를 key값으로, 신고자를 value로 넣음
        dic_report[i[1]].append(i[0])

    for key, value in dic_report.items():
        #신고자의 수가 정지 기준 횟수 이상일 때: 신고자들의 인덱스 구해서 메일 횟수 +1
        if len(value) >= k:
            for j in value:
                answer[id_list.index(j)] += 1

    return answer

* 중요 포인트

  • 집합 자료형 이용 → 중복된 신고 하나로 합침 
  • for문에서 바로 set(report) 적용
  • 딕셔너리(key-value) 자료형 이용

           → id_list에 있는 id들을 key값으로 집합 생성:

                       dic_report={ id: [ ] for id in id_list}  (Key값을 인덱스처럼 []에 넣음)

           → .items() 함수 이용하여 key,value 값 한번에 불러오기

                       for key, value in dic_report.items():

  • 공백으로 나눠져 있는 값 split()해서 한가지 변수에 넣으면 i값에 배열로 들어감 : i = i.split() → i[0], i[1]
  • 신고당한 id 값: key / 그 id를 신고한 신고자들: value

        → 신고자의 수가 정지 기준 횟수 이상일 때: 신고자들의 인덱스 구해서 메일 횟수 +1

                      ↳ ( 따로 count 값 만들지 X )

 


딕셔너리 자료형 개념
  : Key와 Value를 한 쌍으로 갖는 자료형
 

[Python] 딕셔너리 자료형

딕셔너리 자료형 : Key와 Value를 한 쌍으로 갖는 자료형 딕셔너리 주의 사항 key 값은 고유한 값: 중복X 리스트는 key값으로 사용할 수 없다 ex) a={ [1,2] : 'hi' } 는 불가능 딕셔너리 만드는 법 a={1: 'hi'}

yygs321.tistory.com