Recent Posts
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- kotlin
- Spring Batch
- JanusWebRTCGateway
- preemption #
- pytest
- JanusWebRTC
- 자원부족
- JanusGateway
- PersistenceContext
- python
- 오블완
- Value too long for column
- 코루틴 컨텍스트
- 티스토리챌린지
- taint
- VARCHAR (1)
- k8s #kubernetes #쿠버네티스
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- terminal
- table not found
- 겨울 부산
- 달인막창
- tolerated
- 개성국밥
- 코루틴 빌더
- 깡돼후
- mp4fpsmod
- vfr video
- PytestPluginManager
- JanusWebRTCServer
Archives
너와 나의 스토리
[Java] 2022 KAKAO BLIND RECRUITMENT > 신고 결과 받기: 풀이 & 코드 본문
Algorithm/Programmers
[Java] 2022 KAKAO BLIND RECRUITMENT > 신고 결과 받기: 풀이 & 코드
노는게제일좋아! 2022. 6. 1. 01:40반응형
문제: https://programmers.co.kr/learn/courses/30/lessons/92334?language=java
문제 풀이:
- report는 <신고자, 피신고자> 쌍이 리스트로 존재하는 형태이다
- 이를 for 문으로 돌면서 각각 reporter와, respondent로 파싱하고
- 신고자가 전에 이 피신고자를 신고한 적 있는지 확인하고, 아직 신고한 적 없으면 다음 과정을 수행한다.
- reports(<신고자, 피신고자 리스트>)에 피신고자를 삽입한다.
- reports[신고자].put(피신고자)
- 피신고자가 현재 몇 번 신고 당했는지 count한다.
- count[피신고자]++
- 사용자를 for 문으로 돌면서 사용자가 신고한 사람 리스트를 본다.
- 피신고자의 카운트가 k 이상이면 answer[신고자 index]++ 해준다.
소스 코드:
import java.util.*;
public class KakaoBlind2022_1 {
public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = {};
answer = new int[id_list.length];
Map<String, Set<String>> reports = new HashMap<>(); // <신고자, 피신고자 리스트>
Map<String, Integer> count = new HashMap<>(); // <피신고자, 신고 횟수>
for(String pair: report){
Pair reportPair = parse(pair);
String reporter = reportPair.reporter;
String respondent = reportPair.respondent;
Set<String> respondents = reports.getOrDefault(reporter, new HashSet<>());
if(!respondents.contains(respondent)){ // 동일한 유저가 같은 유저를 다시 신고한 경우는 무시
count.put(respondent, count.getOrDefault(respondent, 0)+1);
respondents.add(respondent);
reports.put(reporter, respondents);
}
}
for(int i=0;i<id_list.length; i++){
String reporter = id_list[i];
int num = 0;
for(String respondent: reports.getOrDefault(reporter, new HashSet<>())){
if(count.getOrDefault(respondent,0)>=k) num++;
}
answer[i]=num;
}
return answer;
}
public Pair parse(String report){
String[] pair = report.split(" ");
return new Pair(pair[0], pair[1]);
}
public class Pair {
public String reporter;
public String respondent;
public Pair(String reporter, String respondent) {
this.reporter = reporter;
this.respondent = respondent;
}
}
}
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[Java] 2018 KAKAO BLIND RECRUITMENT[1차] > 추석 트래픽: 풀이 & 코드 & 예외 상황 (0) | 2022.06.05 |
---|---|
[Java] 2020 KAKAO BLIND RECRUITMENT > 문자열 압축: 풀이 & 코드 (0) | 2022.06.02 |
[Java] 2021 KAKAO BLIND RECRUITMENT > 신규 아이디 추천: 풀이 & 코드 (0) | 2022.06.02 |
Comments