코딩테스트연습(파이썬)

신고 결과 받기 / 프로그래머스, 파이썬 코딩테스트 연습2022 KAKAO BLIND RECRUITMENT

LearnerToRunner 2022. 11. 24. 21:28

문제

이용자의 ID가 담긴 문자열 배열 id_list, 각 이용자가 신고한 이용자의 ID 정보가 담긴 문자열 배열 report, 정지 기준이 되는 신고 횟수 k가 매개변수로 주어질 때, 각 유저별로 처리 결과 메일을 받은 횟수를 배열에 담아 return 하도록 solution 함수를 완성해주세요.

 

 

제출답안

def solution(id_list, report, k):
    # 중복이 없는 신고목록
    report_no_dupe = set(report)
    
    # 신고당한 아이디 목록    
    reported_id = [repo.split()[1] for repo in report_no_dupe]
    
    # 경고 수를 초과한 아이디 목록
    banned_id = [id for id in set(reported_id) if reported_id.count(id) >= k]
    
    log = {}
    # 각 키에 값을 0으로 설정
    for id in id_list:
        log[id] = 0
    
    # 중복없는 레포트를 다시 검토
    for repo in report_no_dupe:
        # 신고한 사람, 신고 당한사람
        reporting, reported = repo.split()
        # 신고내역에서 신고당한 사람이 경고유저일 경우 신고한사람의 키값 +=1
        log[reporting]+=1 if reported in banned_id else 0
    
    
    answer = list(log.values())
    
    return answer

 

 

제출 후 개선답안

딕셔너리도 컴프리헨션 문법을 사용할 수 있음을 배움
log 부분 3줄을 한 줄로 줄임

def solution(id_list, report, k):
    
    # 중복이 없는 신고목록
    report_no_dupe = set(report)
    
    # 신고당한 아이디 목록    
    reported_id = [repo.split()[1] for repo in report_no_dupe]
    
    # 경고 수를 초과한 아이디 목록
    banned_id = [id for id in set(reported_id) if reported_id.count(id) >= k]

    # 받을 메일 카운트용 딕셔너리 생성
    log = {id: 0 for id in id_list}
    print(log)
        # 중복없는 레포트를 다시 검토
    for repo in report_no_dupe:
        # 신고한 사람, 신고 당한사람
        reporting, reported = repo.split()
        # 신고내역에서 신고당한 사람이 경고유저일 경우 신고한사람의 키값 +=1
        log[reporting]+=1 if reported in banned_id else 0
    
    answer = list(log.values())
    
    return answer

 

 

문제 바로가기

 

728x90