[문제 링크]
https://school.programmers.co.kr/learn/courses/30/lessons/92334?language=java
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
[풀이 과정]
단순 구현 문제 같아서 처음에 주석으로 내가 어떻게 해야할지 적어 놓고 하나하나 구현해 나갔습니다.
[코드]
import java.util.*;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
// 1. 일단 Map을 만들어 String신고 당한사람 : Set신고 한사람
// 2. Map을 쭉 돌면서 value의 size가 k 이상인 사람 찾기
// 3. id_list에 있는 애들 메일 횟수 정하게 String id : Integer 이메일 받은 횟수 -> 0으로 일단 초기화
// 4. 2번에서 찾은 사람의 value에 있는 id에 다 +1
// 5. answer에 순서대로 넣기
Map<String, Set<String>> reportMap = new HashMap<>();
Map<String, Integer> emailCount = new HashMap<>();
for(String s : id_list) {
emailCount.put(s, 0);
}
for(String r : report) {
String[] s = r.split(" ");
String sender = s[0];
String reciver = s[1];
if(reportMap.containsKey(reciver)) {
reportMap.get(reciver).add(sender);
} else {
Set<String> senderSet = new HashSet<>();
senderSet.add(sender);
reportMap.put(reciver, senderSet);
}
}
for(String reciver : reportMap.keySet()) {
if(reportMap.get(reciver).size() >= k) {
Set<String> senderSet = reportMap.get(reciver);
for(String s : senderSet) {
emailCount.put(s, emailCount.get(s) + 1);
}
}
}
int[] answer = new int[id_list.length];
for(int i = 0; i < id_list.length; i++) {
String s = id_list[i];
int a = emailCount.get(s);
answer[i] = a;
}
return answer;
}
}
[회고]
공채에서 낼 수 있는 문제 중 가장 쉬운 문제인 것 같습니다.
그래도 이제 이 정도는 풀 수 있어 다행입니다..
질문과 피드백은 언제나 환영입니다.
감사합니다.
'CodingTest > Programmers' 카테고리의 다른 글
| [Programmers] 주차 요금 계산 (카카오 2022 공채) (0) | 2025.09.10 |
|---|---|
| [Programmers] k진수에서 소수 개수 구하기 (카카오 2022 공채) (0) | 2025.09.09 |
| [Programmers] 섬 연결하기 (3) | 2025.07.31 |
| [Programmers] 보석 쇼핑 (카카오 인턴) (4) | 2025.07.28 |
| [Programmers] 디스크 컨트롤 (2) | 2025.07.24 |