|
| 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 |
0 commit comments