Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- github
- SW Expert Academy
- ChatGPT
- leetcode
- 우분투
- dacon
- 캐치카페
- gs25
- 프로그래머스
- Docker
- AI 경진대회
- 코로나19
- 자연어처리
- hackerrank
- Real or Not? NLP with Disaster Tweets
- 프로그래머스 파이썬
- 편스토랑 우승상품
- 맥북
- PYTHON
- programmers
- ubuntu
- Git
- Baekjoon
- 데이콘
- Kaggle
- 백준
- 파이썬
- 편스토랑
- 금융문자분석경진대회
- 더현대서울 맛집
Archives
- Today
- Total
솜씨좋은장씨
[Programmers] 2022 KAKAO BLIND RECRUITMENT - 신고 결과 받기 (Python) 본문
Programming/코딩 1일 1문제
[Programmers] 2022 KAKAO BLIND RECRUITMENT - 신고 결과 받기 (Python)
솜씨좋은장씨 2022. 1. 18. 23:45728x90
반응형
코딩 1일 1문제! 오늘의 문제는 2022 KAKAO BLIND RECRUITMENT 문제 중 1개인 신고 결과 받기! 입니다.
풀기는 풀었으나 신고 건수가 많아지면 효율이 떨어지는 코드여서 추후에 수정하고자 합니다.
👨🏻💻 문제 풀이
k번 이상 신고 받은 불량 이용자는 이용 정지가 되며 이용 정지가 되었을 때는
해당 불량 이용자를 신고한 모든 유저에게 불량 이용자 처리결과에 대한
이메일이 전송된다고 할 때 각 유저가 받은 이메일의 개수를 구하는 문제입니다.
단! 한 유저가 같은 사람을 여러번 신고하였을 때에는 여러번의 신고건에 대해서는 1건으로 처리된다고 합니다.
id_list : 유저 ID 리스트
report : 불량 이용자 신고 목록 - "유저ID 불량 이용자ID" 형태
k : 불량 이용자 정지 기준 ( k 회 이상 신고 누적 시 )
입력 받는 값은 위와 같습니다.
answer, check_list = [], []
report_dict = {}
answer = [] : 정답에 사용할 리스트 ( 각 유저가 이메일을 받은 수 )
check_list = [] : 한 유저가 중복으로 한 신고를 제외한 모든 신고 내역
report_dict = {} : 각 유저가 신고한 불량 이용자 내역 ( 중복 제외 )
먼저 사용할 값들을 선언합니다.
for report_id in id_list:
report_dict[report_id] = []
그 다음 report_dict에 각 유저 별로 신고 내역을 담을 list를 생성해주고
for case in report:
report_id, report_name = case.split()
if report_name not in report_dict[report_id]:
report_dict[report_id].append(report_name)
check_list.append(report_name)
불량 이용자 신고내역에서 하나씩 값을 꺼내와서
전체 신고내역과 각 유저별 신고 내역을 채워줍니다.
이때 신고내역의 값은 신고를 한 유저의 ID와 불량 이용자의 ID가 공백을 기준으로 이어져 있으므로
report_id, report_name = case.split()
split 하여 활용하였습니다.
그리고 중복 신고는 제외하기 위해서 이미 각 유저의 신고목록에 추가된 불량이용자 ID는 더이상 추가하지 않도록 했습니다.
cnt_dict = Counter(check_list)
for report_id in id_list:
answer.append(len([check for check in report_dict[report_id] if cnt_dict[check] >= k]))
마지막으로 전체 신고 목록에서 각 불량 이용자가 몇 번 씩 신고를 당했는지 확인한 뒤
각 유저의 신고목록에서 k 번 이상 신고를 받은 불량 이용자 ID가 존재할 경우만 남긴 뒤 개수를 세어 정답을 만듭니다.
전체 코드는 아래를 참고해주세요.
👨🏻💻 코드 ( Solution )
from collections import Counter
def solution(id_list, report, k):
answer, check_list = [], []
report_dict = {}
for report_id in id_list:
report_dict[report_id] = []
for case in report:
report_id, report_name = case.split()
if report_name not in report_dict[report_id]:
report_dict[report_id].append(report_name)
check_list.append(report_name)
cnt_dict = Counter(check_list)
for report_id in id_list:
answer.append(len([check for check in report_dict[report_id] if cnt_dict[check] >= k]))
return answer
'Programming > 코딩 1일 1문제' 카테고리의 다른 글
[BaekJoon] 2985번 : 세 수 (Python) (0) | 2022.01.20 |
---|---|
[Programmers] 2022 KAKAO BLIND RECRUITMENT - 주차 요금 계산 (Python) (0) | 2022.01.19 |
[BaekJoon] 1453번 : 피시방 알바 (Python) (0) | 2022.01.17 |
[BaekJoon] 18108번 : 1998년생인 내가 태국에서는 2541년생?! (Python) (0) | 2022.01.16 |
[BaekJoon] 2869번 : 달팽이는 올라가고 싶다 (Python) (0) | 2022.01.15 |
Comments