코테/프로그래머스

[프로그래머스/Level1] 신고 결과 받기 (JAVA)

imname1am 2024. 7. 18. 23:48
반응형

📖 문제

https://school.programmers.co.kr/learn/courses/30/lessons/92334

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 

💡  풀이 방식

• Map

필요 자료구조
- 유저 ID와 그에 대한 임의의 인덱스 저장하는 Map
- 유저 ID와 그 ID를 신고한 사람의 ID 집합을 가진 Map

 

 

1.id_list를 돌며 각 ID와 임의의 인덱스를 저장하고, 각 ID를 신고한 ID 목록을 중복 없이 저장하기 위해 Set을 초기화한다. 

for(int i = 0 ; i < id_list.length ; i++) {
    String name = id_list[i];
    map.put(name, new HashSet<>());
    idxMap.put(name, i);
}

 

 

2. report 배열을 돌며 누가 누구를 신고했는지 저장한다.

for(String r : report) {
    String[] s = r.split(" ");            
    map.get(s[1]).add(s[0]);    // s[0]이 s[1]을 신고함
}

 

 

3. id_list를 돌며 해당 id가 신고당한 횟수가 k번 이상인 경우, 이용 정지 메일을 발송한다.

for(int i = 0 ; i < id_list.length ; i++) {
    HashSet<String> send = map.get(id_list[i]);	// id_list[i]를 신고한 사람들 목록 (중복 X)

    if(send.size() >= k) {	// k번 이상 신고당한 경우
        for(String x : send) {	// 이 사람을 신고한 사람들에게 경고 메일 발송
            answer[idxMap.get(x)]++;
        }
    }
}

 

 

 

💥 유의사항

해당 ID를 신고한 사람의 ID를 저장할 때 중복이 없어야 하므로 Set을 이용한다.

 

 

🔺 코드

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
32
33
34
35
36
import java.util.*;
 
class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = new int[id_list.length];
        
        Map<String, Integer> idxMap = new HashMap<>();      // 유저 ID와 임의의 인덱스 저장용 Map
        Map<String, HashSet<String>> map = new HashMap<>(); // 신고자 id룰 신고한 id 목록 저장 (중복 없이)
 
        // map의 HashSet 초기화 & ID 별 인덱스 저장
        for(int i = 0 ; i < id_list.length ; i++) {
            String name = id_list[i];
            map.put(name, new HashSet<>());
            idxMap.put(name, i);
        }
        
        // 누가 누구를 신고했는지 저장
        for(String r : report) {
            String[] s = r.split(" ");            
            map.get(s[1]).add(s[0]);    // s[0]이 s[1]을 신고함
        }
 
        // 이용 정지 메일 발송
        for(int i = 0 ; i < id_list.length ; i++) {
            HashSet<String> send = map.get(id_list[i]);
            
            if(send.size() >= k) {
                for(String x : send) {
                    answer[idxMap.get(x)]++;
                }
            }
        }
                
        return answer;
    }
}
cs

 

 

 

 

➕ 다른 풀이 방식

- 이 코드도 짧은 편이라 좋다

 

[프로그래머스/Java] - Lv1.신고 결과 받기

신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다.각 유저는 한 번에 한 명의 유저를 신

velog.io

 

- 2번째 풀이가 객체 지향적이다. (참고용)

 

[Java] 프로그래머스 신고 결과 받기 자바

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/92334 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이

psip31.tistory.com

 

 


💦 어려웠던 점

- 각 유저별 고유 인덱스를 부여할 생각을 하지 못 했다...

 

 

🧐 새로 알게 된 내용

- Map<String, HashSet<String>> map = new HashMap<>(); 여기서 HashSet으로 정의하지 않으면 에러가 난다.

- Map의 value로 저장된 Set에 값 추가하는 방법 → map.get(s[1]).add(s[0]);

- 각 유저별 고유의 인덱스를 부여하는 풀이를 기억하자!

 

1회독 2회독 3회독 4회독 5회독
V        

(참고)

 

Programmers - 신고 결과 받기(Java)

https://programmers.co.kr/learn/courses/30/lessons/92334 코딩테스트 연습 - 신고 결과 받기 문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니

jangcenter.tistory.com

 

반응형