Skip to content

Commit 8f2c197

Browse files
committed
[level 1] Title: 신고 결과 받기, Time: 254.36 ms, Memory: 39.9 MB -BaekjoonHub
1 parent eade42c commit 8f2c197

2 files changed

Lines changed: 243 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?language=cpp)
4+
5+
### 성능 요약
6+
7+
메모리: 39.9 MB, 시간: 254.36 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월 12일 15:37:37
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: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#include <string>
2+
#include <vector>
3+
#include <set>
4+
#include <map>
5+
#include <sstream>
6+
7+
using namespace std;
8+
9+
vector<int> solution(vector<string> id_list, vector<string> report, int k) {
10+
vector<int> answer(id_list.size(), 0);
11+
12+
map<string, set<string>> reported_by;
13+
map<string, int> id_idx;
14+
for(int i=0; i<id_list.size(); i++){
15+
id_idx[id_list[i]] = i;
16+
}
17+
18+
19+
for(string s : report){
20+
string user, target;
21+
stringstream ss(s);
22+
ss >> user >> target;
23+
24+
reported_by[target].insert(user);
25+
}
26+
27+
for(auto [target, users] : reported_by){
28+
if(users.size() >= k){
29+
for(string user : users){
30+
answer[id_idx[user]]++;
31+
}
32+
}
33+
}
34+
35+
return answer;
36+
}

0 commit comments

Comments
 (0)