Skip to content

Commit 970da71

Browse files
committed
[level 1] Title: 개인정보 수집 유효기간, Time: 0.08 ms, Memory: 4.43 MB -BaekjoonHub
1 parent 969e92e commit 970da71

2 files changed

Lines changed: 265 additions & 0 deletions

File tree

Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,219 @@
1+
# [level 1] 개인정보 수집 유효기간 - 150370
2+
3+
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/150370)
4+
5+
### 성능 요약
6+
7+
메모리: 4.43 MB, 시간: 0.08 ms
8+
9+
### 구분
10+
11+
코딩테스트 연습 > 2023 KAKAO BLIND RECRUITMENT
12+
13+
### 채점결과
14+
15+
정확성: 100.0<br/>합계: 100.0 / 100.0
16+
17+
### 제출 일자
18+
19+
2026년 05월 02일 22:23:43
20+
21+
### 문제 설명
22+
23+
<p>고객의 약관 동의를 얻어서 수집된 1~<code>n</code>번으로 분류되는 개인정보 <code>n</code>개가 있습니다. 약관 종류는 여러 가지 있으며 각 약관마다 개인정보 보관 유효기간이 정해져 있습니다. 당신은 각 개인정보가 어떤 약관으로 수집됐는지 알고 있습니다. 수집된 개인정보는 유효기간 전까지만 보관 가능하며, 유효기간이 지났다면 반드시 파기해야 합니다.</p>
24+
25+
<p>예를 들어, A라는 약관의 유효기간이 12 달이고, 2021년 1월 5일에 수집된 개인정보가 A약관으로 수집되었다면 해당 개인정보는 2022년 1월 4일까지 보관 가능하며 2022년 1월 5일부터 파기해야 할 개인정보입니다.<br>
26+
당신은 오늘 날짜로 파기해야 할 개인정보 번호들을 구하려 합니다.</p>
27+
28+
<p><strong>모든 달은 28일까지 있다고 가정합니다.</strong></p>
29+
30+
<p>다음은 오늘 날짜가 <code>2022.05.19</code>일 때의 예시입니다.</p>
31+
<table class="table">
32+
<thead><tr>
33+
<th>약관 종류</th>
34+
<th>유효기간</th>
35+
</tr>
36+
</thead>
37+
<tbody><tr>
38+
<td>A</td>
39+
<td>6 달</td>
40+
</tr>
41+
<tr>
42+
<td>B</td>
43+
<td>12 달</td>
44+
</tr>
45+
<tr>
46+
<td>C</td>
47+
<td>3 달</td>
48+
</tr>
49+
</tbody>
50+
</table><table class="table">
51+
<thead><tr>
52+
<th>번호</th>
53+
<th>개인정보 수집 일자</th>
54+
<th>약관 종류</th>
55+
</tr>
56+
</thead>
57+
<tbody><tr>
58+
<td>1</td>
59+
<td><code>2021.05.02</code></td>
60+
<td>A</td>
61+
</tr>
62+
<tr>
63+
<td>2</td>
64+
<td><code>2021.07.01</code></td>
65+
<td>B</td>
66+
</tr>
67+
<tr>
68+
<td>3</td>
69+
<td><code>2022.02.19</code></td>
70+
<td>C</td>
71+
</tr>
72+
<tr>
73+
<td>4</td>
74+
<td><code>2022.02.20</code></td>
75+
<td>C</td>
76+
</tr>
77+
</tbody>
78+
</table>
79+
<ul>
80+
<li>첫 번째 개인정보는 A약관에 의해 2021년 11월 1일까지 보관 가능하며, 유효기간이 지났으므로 파기해야 할 개인정보입니다.</li>
81+
<li>두 번째 개인정보는 B약관에 의해 2022년 6월 28일까지 보관 가능하며, 유효기간이 지나지 않았으므로 아직 보관 가능합니다.</li>
82+
<li>세 번째 개인정보는 C약관에 의해 2022년 5월 18일까지 보관 가능하며, 유효기간이 지났으므로 파기해야 할 개인정보입니다.</li>
83+
<li>네 번째 개인정보는 C약관에 의해 2022년 5월 19일까지 보관 가능하며, 유효기간이 지나지 않았으므로 아직 보관 가능합니다.</li>
84+
</ul>
85+
86+
<p>따라서 파기해야 할 개인정보 번호는 [1, 3]입니다.</p>
87+
88+
<p>오늘 날짜를 의미하는 문자열 <code>today</code>, 약관의 유효기간을 담은 1차원 문자열 배열 <code>terms</code>와 수집된 개인정보의 정보를 담은 1차원 문자열 배열 <code>privacies</code>가 매개변수로 주어집니다. 이때 파기해야 할 개인정보의 번호를 오름차순으로 1차원 정수 배열에 담아 return 하도록 solution 함수를 완성해 주세요.</p>
89+
90+
<hr>
91+
92+
<h5>제한사항</h5>
93+
94+
<ul>
95+
<li><code>today</code>는 "<code>YYYY</code>.<code>MM</code>.<code>DD</code>" 형태로 오늘 날짜를 나타냅니다. </li>
96+
<li>1 ≤ <code>terms</code>의 길이 ≤ 20
97+
98+
<ul>
99+
<li><code>terms</code>의 원소는 "<code>약관 종류</code> <code>유효기간</code>" 형태의 <code>약관 종류</code>와 <code>유효기간</code>을 공백 하나로 구분한 문자열입니다.</li>
100+
<li><code>약관 종류</code>는 <code>A</code>~<code>Z</code>중 알파벳 대문자 하나이며, <code>terms</code> 배열에서 <code>약관 종류</code>는 중복되지 않습니다.</li>
101+
<li><code>유효기간</code>은 개인정보를 보관할 수 있는 달 수를 나타내는 정수이며, 1 이상 100 이하입니다.</li>
102+
</ul></li>
103+
<li>1 ≤ <code>privacies</code>의 길이 ≤ 100
104+
105+
<ul>
106+
<li><code>privacies[i]</code>는 <code>i+1</code>번 개인정보의 수집 일자와 약관 종류를 나타냅니다.</li>
107+
<li><code>privacies</code>의 원소는 "<code>날짜</code> <code>약관 종류</code>" 형태의 <code>날짜</code>와 <code>약관 종류</code>를 공백 하나로 구분한 문자열입니다.</li>
108+
<li><code>날짜</code>는 "<code>YYYY</code>.<code>MM</code>.<code>DD</code>" 형태의 개인정보가 수집된 날짜를 나타내며, <code>today</code> 이전의 날짜만 주어집니다.</li>
109+
<li><code>privacies</code>의 <code>약관 종류</code>는 항상 <code>terms</code>에 나타난 <code>약관 종류</code>만 주어집니다.</li>
110+
</ul></li>
111+
<li><code>today</code>와 <code>privacies</code>에 등장하는 <code>날짜</code>의 <code>YYYY</code>는 연도, <code>MM</code>은 월, <code>DD</code>는 일을 나타내며 점(<code>.</code>) 하나로 구분되어 있습니다.
112+
113+
<ul>
114+
<li>2000 ≤ <code>YYYY</code> ≤ 2022</li>
115+
<li>1 ≤ <code>MM</code> ≤ 12</li>
116+
<li><code>MM</code>이 한 자릿수인 경우 앞에 0이 붙습니다.</li>
117+
<li>1 ≤ <code>DD</code> ≤ 28</li>
118+
<li><code>DD</code>가 한 자릿수인 경우 앞에 0이 붙습니다.</li>
119+
</ul></li>
120+
<li>파기해야 할 개인정보가 하나 이상 존재하는 입력만 주어집니다.</li>
121+
</ul>
122+
123+
<hr>
124+
125+
<h5>입출력 예</h5>
126+
<table class="table">
127+
<thead><tr>
128+
<th>today</th>
129+
<th>terms</th>
130+
<th>privacies</th>
131+
<th>result</th>
132+
</tr>
133+
</thead>
134+
<tbody><tr>
135+
<td><code>"2022.05.19"</code></td>
136+
<td><code>["A 6", "B 12", "C 3"]</code></td>
137+
<td><code>["2021.05.02 A", "2021.07.01 B", "2022.02.19 C", "2022.02.20 C"]</code></td>
138+
<td>[1, 3]</td>
139+
</tr>
140+
<tr>
141+
<td><code>"2020.01.01"</code></td>
142+
<td><code>["Z 3", "D 5"]</code></td>
143+
<td><code>["2019.01.01 D", "2019.11.15 Z", "2019.08.02 D", "2019.07.01 D", "2018.12.28 Z"]</code></td>
144+
<td>[1, 4, 5]</td>
145+
</tr>
146+
</tbody>
147+
</table>
148+
<hr>
149+
150+
<h5>입출력 예 설명</h5>
151+
152+
<p><strong>입출력 예 #1</strong></p>
153+
154+
<ul>
155+
<li>문제 예시와 같습니다.</li>
156+
</ul>
157+
158+
<p><strong>입출력 예 #2</strong></p>
159+
<table class="table">
160+
<thead><tr>
161+
<th>약관 종류</th>
162+
<th>유효기간</th>
163+
</tr>
164+
</thead>
165+
<tbody><tr>
166+
<td>Z</td>
167+
<td>3 달</td>
168+
</tr>
169+
<tr>
170+
<td>D</td>
171+
<td>5 달</td>
172+
</tr>
173+
</tbody>
174+
</table><table class="table">
175+
<thead><tr>
176+
<th>번호</th>
177+
<th>개인정보 수집 일자</th>
178+
<th>약관 종류</th>
179+
</tr>
180+
</thead>
181+
<tbody><tr>
182+
<td>1</td>
183+
<td><code>2019.01.01</code></td>
184+
<td>D</td>
185+
</tr>
186+
<tr>
187+
<td>2</td>
188+
<td><code>2019.11.15</code></td>
189+
<td>Z</td>
190+
</tr>
191+
<tr>
192+
<td>3</td>
193+
<td><code>2019.08.02</code></td>
194+
<td>D</td>
195+
</tr>
196+
<tr>
197+
<td>4</td>
198+
<td><code>2019.07.01</code></td>
199+
<td>D</td>
200+
</tr>
201+
<tr>
202+
<td>5</td>
203+
<td><code>2018.12.28</code></td>
204+
<td>Z</td>
205+
</tr>
206+
</tbody>
207+
</table>
208+
<p>오늘 날짜는 2020년 1월 1일입니다.</p>
209+
210+
<ul>
211+
<li>첫 번째 개인정보는 D약관에 의해 2019년 5월 28일까지 보관 가능하며, 유효기간이 지났으므로 파기해야 할 개인정보입니다.</li>
212+
<li>두 번째 개인정보는 Z약관에 의해 2020년 2월 14일까지 보관 가능하며, 유효기간이 지나지 않았으므로 아직 보관 가능합니다.</li>
213+
<li>세 번째 개인정보는 D약관에 의해 2020년 1월 1일까지 보관 가능하며, 유효기간이 지나지 않았으므로 아직 보관 가능합니다.</li>
214+
<li>네 번째 개인정보는 D약관에 의해 2019년 11월 28일까지 보관 가능하며, 유효기간이 지났으므로 파기해야 할 개인정보입니다.</li>
215+
<li>다섯 번째 개인정보는 Z약관에 의해 2019년 3월 27일까지 보관 가능하며, 유효기간이 지났으므로 파기해야 할 개인정보입니다.</li>
216+
</ul>
217+
218+
219+
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#include <string>
2+
#include <vector>
3+
#include <map>
4+
#include <sstream>
5+
6+
using namespace std;
7+
8+
int dateToDays(string date){
9+
int y = stoi(date.substr(0,4));
10+
int m = stoi(date.substr(5,2));
11+
int d = stoi(date.substr(8,2));
12+
13+
return (y*12*28) + (m*28) + d;
14+
}
15+
16+
vector<int> solution(string today, vector<string> terms, vector<string> privacies) {
17+
vector<int> answer;
18+
19+
int todayDays = dateToDays(today);
20+
map<char, int> termMap;
21+
22+
for(string term : terms){
23+
stringstream ss(term);
24+
char type;
25+
int month;
26+
ss >> type >> month;
27+
28+
termMap[type] = month*28;
29+
}
30+
31+
for(int i=0 ; i<privacies.size(); i++){
32+
33+
string dateStr = privacies[i].substr(0,10);
34+
char type = privacies[i].back();
35+
36+
int days = dateToDays(dateStr);
37+
int expireDays = days + termMap[type];
38+
39+
if(todayDays >= expireDays){
40+
answer.push_back(i+1);
41+
}
42+
43+
}
44+
45+
return answer;
46+
}

0 commit comments

Comments
 (0)