반응형
[프로그래머스] 2022 KAKAO BLIND RECRUITMENT 신고 결과 받기
https://programmers.co.kr/learn/courses/30/lessons/92334
문제접근
일단 문제가 고려해야 할 것들이 많아서 처음에는 신고 당한 횟수, 신고한 사람, 알림 메일을 받을 횟수를 모두 따로 map을 이용해서 3개의 map을 만들어서 접근했는데 너무 복잡해서 그냥 3개의 정보를 가진 User 클래스를 만들게 되었다. 이렇게 하니까 더 생각하기 쉬웠고 내가 느끼기에는 복잡함이 많이 줄어들었다.
Code
import java.util.HashMap;
import java.util.HashSet;
class Solution {
class User {
HashSet<String> report; // 신고한 사람들 모음
int count; // 신고 받은 횟수
int alarm; // 메일 횟수
User() {
count = 0;
alarm = 0;
report = new HashSet<>();
}
public void beReported(){
count += 1;
}
public void addAlarm(){
alarm += 1;
}
}
public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length];
HashMap<String, User> users = new HashMap<>();
for(int i = 0; i<id_list.length; i++){
// users 초기화
users.put(id_list[i],new User());
}
for (int i = 0; i < report.length; i++) {
// 신고 처리
String[] temp = report[i].split(" ");
if(users.get(temp[0]).report.contains(temp[1])) continue;
users.get(temp[0]).report.add(temp[1]);
users.get(temp[1]).beReported();
}
for(int i = 0; i< id_list.length; i++){
// 신고 결과 메일 처리
if(users.get(id_list[i]).report.isEmpty()){
answer[i] = 0;
continue;
}
for(String reported: users.get(id_list[i]).report){
if(users.get(reported).count >= k){
answer[i] += 1;
}
}
}
return answer;
}
}
어려웠던 점 / 배운 점 / 느낀 점
class를 이용하니까 더 간단하게? 생각하게 된 것 같다. 처음에 문제를 봤을 때는 뭐지 어려워 보이는데 라고 생각을 했는데 막상 풀고보니까 쉬운 문제같다고 느껴졌다.
그리고 코테에서도 private으로 선언하여 getter/setter를 만들어 줘야 할까? 라는 의문을 가지게 되었는데... 너무 길어져서 굳이 할 필요 없을것 같다는 느낌을 받아서 그렇게 하지는 않았다.
반응형
'Algorithm' 카테고리의 다른 글
[Algorithm/Java][프로그래머스] 카카오프렌즈 컬러링북 (0) | 2022.02.17 |
---|---|
[Algorithm/Java][백준] 1676번 팩토리얼 0의 개수 (0) | 2022.02.14 |
[Algorithm/Java][LeetCode] 121. Best Time to Buy and Sell Stock (0) | 2022.02.05 |
[Algorithm/Java][LeetCode] 101. Symmetric Tree (0) | 2022.02.05 |
[Algorithm/Java][백준] 2805번 나무 자르기 (0) | 2022.01.28 |