Skip to content

Commit 81b65b5

Browse files
committed
[level 1] Title: 신고 결과 받기, Time: 129.85 ms, Memory: 171 MB -BaekjoonHub
1 parent bae346f commit 81b65b5

2 files changed

Lines changed: 242 additions & 0 deletions

File tree

Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,207 @@
1+
# [level 1] 신고 결과 받기 - 92334
2+
3+
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/92334)
4+
5+
### 성능 요약
6+
7+
메모리: 171 MB, 시간: 129.85 ms
8+
9+
### 구분
10+
11+
코딩테스트 연습 > 2022 KAKAO BLIND RECRUITMENT
12+
13+
### 채점결과
14+
15+
정확성: 100.0<br/>합계: 100.0 / 100.0
16+
17+
### 제출 일자
18+
19+
2026년 05월 08일 11:52:41
20+
21+
### 문제 설명
22+
23+
<h5>문제 설명</h5>
24+
25+
<p>신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다.</p>
26+
27+
<ul>
28+
<li>각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.
29+
30+
<ul>
31+
<li>신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다.</li>
32+
<li>한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다.</li>
33+
</ul></li>
34+
<li>k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다.
35+
36+
<ul>
37+
<li>유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다.</li>
38+
</ul></li>
39+
</ul>
40+
41+
<p>다음은 전체 유저 목록이 ["muzi", "frodo", "apeach", "neo"]이고, k = 2(즉, 2번 이상 신고당하면 이용 정지)인 경우의 예시입니다.</p>
42+
<table class="table">
43+
<thead><tr>
44+
<th>유저 ID</th>
45+
<th>유저가 신고한 ID</th>
46+
<th>설명</th>
47+
</tr>
48+
</thead>
49+
<tbody><tr>
50+
<td>"muzi"</td>
51+
<td>"frodo"</td>
52+
<td>"muzi"가 "frodo"를 신고했습니다.</td>
53+
</tr>
54+
<tr>
55+
<td>"apeach"</td>
56+
<td>"frodo"</td>
57+
<td>"apeach"가 "frodo"를 신고했습니다.</td>
58+
</tr>
59+
<tr>
60+
<td>"frodo"</td>
61+
<td>"neo"</td>
62+
<td>"frodo"가 "neo"를 신고했습니다.</td>
63+
</tr>
64+
<tr>
65+
<td>"muzi"</td>
66+
<td>"neo"</td>
67+
<td>"muzi"가 "neo"를 신고했습니다.</td>
68+
</tr>
69+
<tr>
70+
<td>"apeach"</td>
71+
<td>"muzi"</td>
72+
<td>"apeach"가 "muzi"를 신고했습니다.</td>
73+
</tr>
74+
</tbody>
75+
</table>
76+
<p>각 유저별로 신고당한 횟수는 다음과 같습니다.</p>
77+
<table class="table">
78+
<thead><tr>
79+
<th>유저 ID</th>
80+
<th>신고당한 횟수</th>
81+
</tr>
82+
</thead>
83+
<tbody><tr>
84+
<td>"muzi"</td>
85+
<td>1</td>
86+
</tr>
87+
<tr>
88+
<td>"frodo"</td>
89+
<td>2</td>
90+
</tr>
91+
<tr>
92+
<td>"apeach"</td>
93+
<td>0</td>
94+
</tr>
95+
<tr>
96+
<td>"neo"</td>
97+
<td>2</td>
98+
</tr>
99+
</tbody>
100+
</table>
101+
<p>위 예시에서는 2번 이상 신고당한 "frodo"와 "neo"의 게시판 이용이 정지됩니다. 이때, 각 유저별로 신고한 아이디와 정지된 아이디를 정리하면 다음과 같습니다.</p>
102+
<table class="table">
103+
<thead><tr>
104+
<th>유저 ID</th>
105+
<th>유저가 신고한 ID</th>
106+
<th>정지된 ID</th>
107+
</tr>
108+
</thead>
109+
<tbody><tr>
110+
<td>"muzi"</td>
111+
<td>["frodo", "neo"]</td>
112+
<td>["frodo", "neo"]</td>
113+
</tr>
114+
<tr>
115+
<td>"frodo"</td>
116+
<td>["neo"]</td>
117+
<td>["neo"]</td>
118+
</tr>
119+
<tr>
120+
<td>"apeach"</td>
121+
<td>["muzi", "frodo"]</td>
122+
<td>["frodo"]</td>
123+
</tr>
124+
<tr>
125+
<td>"neo"</td>
126+
<td>없음</td>
127+
<td>없음</td>
128+
</tr>
129+
</tbody>
130+
</table>
131+
<p>따라서 "muzi"는 처리 결과 메일을 2회, "frodo"와 "apeach"는 각각 처리 결과 메일을 1회 받게 됩니다.</p>
132+
133+
<p>이용자의 ID가 담긴 문자열 배열 <code>id_list</code>, 각 이용자가 신고한 이용자의 ID 정보가 담긴 문자열 배열 <code>report</code>, 정지 기준이 되는 신고 횟수 <code>k</code>가 매개변수로 주어질 때, 각 유저별로 처리 결과 메일을 받은 횟수를 배열에 담아 return 하도록 solution 함수를 완성해주세요.</p>
134+
135+
<hr>
136+
137+
<h5>제한사항</h5>
138+
139+
<ul>
140+
<li>2 ≤ <code>id_list</code>의 길이 ≤ 1,000
141+
142+
<ul>
143+
<li>1 ≤ <code>id_list</code>의 원소 길이 ≤ 10</li>
144+
<li><code>id_list</code>의 원소는 이용자의 id를 나타내는 문자열이며 알파벳 소문자로만 이루어져 있습니다.</li>
145+
<li><code>id_list</code>에는 같은 아이디가 중복해서 들어있지 않습니다.</li>
146+
</ul></li>
147+
<li>1 ≤ <code>report</code>의 길이 ≤ 200,000
148+
149+
<ul>
150+
<li>3 ≤ <code>report</code>의 원소 길이 ≤ 21</li>
151+
<li><code>report</code>의 원소는 "이용자id 신고한id"형태의 문자열입니다.</li>
152+
<li>예를 들어 "muzi frodo"의 경우 "muzi"가 "frodo"를 신고했다는 의미입니다.</li>
153+
<li>id는 알파벳 소문자로만 이루어져 있습니다.</li>
154+
<li>이용자id와 신고한id는 공백(스페이스)하나로 구분되어 있습니다.</li>
155+
<li>자기 자신을 신고하는 경우는 없습니다.</li>
156+
</ul></li>
157+
<li>1 ≤ <code>k</code> ≤ 200, <code>k</code>는 자연수입니다.</li>
158+
<li>return 하는 배열은 <code>id_list</code>에 담긴 id 순서대로 각 유저가 받은 결과 메일 수를 담으면 됩니다.</li>
159+
</ul>
160+
161+
<hr>
162+
163+
<h5>입출력 예</h5>
164+
<table class="table">
165+
<thead><tr>
166+
<th>id_list</th>
167+
<th>report</th>
168+
<th>k</th>
169+
<th>result</th>
170+
</tr>
171+
</thead>
172+
<tbody><tr>
173+
<td><code>["muzi", "frodo", "apeach", "neo"]</code></td>
174+
<td><code>["muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"]</code></td>
175+
<td>2</td>
176+
<td>[2,1,1,0]</td>
177+
</tr>
178+
<tr>
179+
<td><code>["con", "ryan"]</code></td>
180+
<td><code>["ryan con", "ryan con", "ryan con", "ryan con"]</code></td>
181+
<td>3</td>
182+
<td>[0,0]</td>
183+
</tr>
184+
</tbody>
185+
</table>
186+
<hr>
187+
188+
<h5>입출력 예 설명</h5>
189+
190+
<p><strong>입출력 예 #1</strong></p>
191+
192+
<p>문제의 예시와 같습니다.</p>
193+
194+
<p><strong>입출력 예 #2</strong></p>
195+
196+
<p>"ryan"이 "con"을 4번 신고했으나, 주어진 조건에 따라 한 유저가 같은 유저를 여러 번 신고한 경우는 신고 횟수 1회로 처리합니다. 따라서 "con"은 1회 신고당했습니다. 3번 이상 신고당한 이용자는 없으며, "con"과 "ryan"은 결과 메일을 받지 않습니다. 따라서 [0, 0]을 return 합니다.</p>
197+
198+
<hr>
199+
200+
<h5>제한시간 안내</h5>
201+
202+
<ul>
203+
<li>정확성 테스트 : 10초</li>
204+
</ul>
205+
206+
207+
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
public int[] solution(String[] id_list, String[] report, int k) {
5+
// 중복 신고 제거하기
6+
HashSet<String> reportSet = new HashSet<>(Arrays.asList(report));
7+
8+
// 신고당한 횟수 기록
9+
HashMap<String, Integer> reportCountMap = new HashMap<>();
10+
for (String rep: reportSet){
11+
String reported = rep.split(" ")[1];
12+
reportCountMap.put(reported, reportCountMap.getOrDefault(reported, 0) + 1);
13+
}
14+
15+
// 내가 신고한 사람 중 정지 된 사람이 몇명인지
16+
HashMap<String, Integer> mailCountMap = new HashMap<>();
17+
18+
for (String rep: reportSet){
19+
String[] name = rep.split(" ");
20+
String reporter = name[0];
21+
String reported = name[1];
22+
23+
if (reportCountMap.get(reported) >= k){
24+
mailCountMap.put(reporter, mailCountMap.getOrDefault(reporter, 0) + 1);
25+
}
26+
}
27+
28+
// 결과 배열 만들기
29+
int[] answer = new int[id_list.length];
30+
for (int i = 0; i < id_list.length; i++){
31+
answer[i] = mailCountMap.getOrDefault(id_list[i], 0);
32+
}
33+
return answer;
34+
}
35+
}

0 commit comments

Comments
 (0)