๐ ํ์ด์ฌ ์ผ๋ก ํ์ด
๐ ๋ฌธ์ ๋งํฌ :
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๐ ๋ฌธ์ ์ค๋ช :
๊ณ ๊ฐ์ ์ฝ๊ด ๋์๋ฅผ ์ป์ด์ ์์ง๋ 1~n๋ฒ์ผ๋ก ๋ถ๋ฅ๋๋ ๊ฐ์ธ์ ๋ณด n๊ฐ๊ฐ ์์ต๋๋ค. ์ฝ๊ด ์ข ๋ฅ๋ ์ฌ๋ฌ ๊ฐ์ง ์์ผ๋ฉฐ ๊ฐ ์ฝ๊ด๋ง๋ค ๊ฐ์ธ์ ๋ณด ๋ณด๊ด ์ ํจ๊ธฐ๊ฐ์ด ์ ํด์ ธ ์์ต๋๋ค. ๋น์ ์ ๊ฐ ๊ฐ์ธ์ ๋ณด๊ฐ ์ด๋ค ์ฝ๊ด์ผ๋ก ์์ง๋๋์ง ์๊ณ ์์ต๋๋ค. ์์ง๋ ๊ฐ์ธ์ ๋ณด๋ ์ ํจ๊ธฐ๊ฐ ์ ๊น์ง๋ง ๋ณด๊ด ๊ฐ๋ฅํ๋ฉฐ, ์ ํจ๊ธฐ๊ฐ์ด ์ง๋ฌ๋ค๋ฉด ๋ฐ๋์ ํ๊ธฐํด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, A๋ผ๋ ์ฝ๊ด์ ์ ํจ๊ธฐ๊ฐ์ด 12 ๋ฌ์ด๊ณ , 2021๋
1์ 5์ผ์ ์์ง๋ ๊ฐ์ธ์ ๋ณด๊ฐ A์ฝ๊ด์ผ๋ก ์์ง๋์๋ค๋ฉด ํด๋น ๊ฐ์ธ์ ๋ณด๋ 2022๋
1์ 4์ผ๊น์ง ๋ณด๊ด ๊ฐ๋ฅํ๋ฉฐ 2022๋
1์ 5์ผ๋ถํฐ ํ๊ธฐํด์ผ ํ ๊ฐ์ธ์ ๋ณด์
๋๋ค.
๋น์ ์ ์ค๋ ๋ ์ง๋ก ํ๊ธฐํด์ผ ํ ๊ฐ์ธ์ ๋ณด ๋ฒํธ๋ค์ ๊ตฌํ๋ ค ํฉ๋๋ค.
๋ชจ๋ ๋ฌ์ 28์ผ๊น์ง ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
๋ค์์ ์ค๋ ๋ ์ง๊ฐ 2022.05.19์ผ ๋์ ์์์ ๋๋ค.


- ์ฒซ ๋ฒ์งธ ๊ฐ์ธ์ ๋ณด๋ A์ฝ๊ด์ ์ํด 2021๋ 11์ 1์ผ๊น์ง ๋ณด๊ด ๊ฐ๋ฅํ๋ฉฐ, ์ ํจ๊ธฐ๊ฐ์ด ์ง๋ฌ์ผ๋ฏ๋ก ํ๊ธฐํด์ผ ํ ๊ฐ์ธ์ ๋ณด์ ๋๋ค.
- ๋ ๋ฒ์งธ ๊ฐ์ธ์ ๋ณด๋ B์ฝ๊ด์ ์ํด 2022๋ 6์ 28์ผ๊น์ง ๋ณด๊ด ๊ฐ๋ฅํ๋ฉฐ, ์ ํจ๊ธฐ๊ฐ์ด ์ง๋์ง ์์์ผ๋ฏ๋ก ์์ง ๋ณด๊ด ๊ฐ๋ฅํฉ๋๋ค.
- ์ธ ๋ฒ์งธ ๊ฐ์ธ์ ๋ณด๋ C์ฝ๊ด์ ์ํด 2022๋ 5์ 18์ผ๊น์ง ๋ณด๊ด ๊ฐ๋ฅํ๋ฉฐ, ์ ํจ๊ธฐ๊ฐ์ด ์ง๋ฌ์ผ๋ฏ๋ก ํ๊ธฐํด์ผ ํ ๊ฐ์ธ์ ๋ณด์ ๋๋ค.
- ๋ค ๋ฒ์งธ ๊ฐ์ธ์ ๋ณด๋ C์ฝ๊ด์ ์ํด 2022๋ 5์ 19์ผ๊น์ง ๋ณด๊ด ๊ฐ๋ฅํ๋ฉฐ, ์ ํจ๊ธฐ๊ฐ์ด ์ง๋์ง ์์์ผ๋ฏ๋ก ์์ง ๋ณด๊ด ๊ฐ๋ฅํฉ๋๋ค.
๋ฐ๋ผ์ ํ๊ธฐํด์ผ ํ ๊ฐ์ธ์ ๋ณด ๋ฒํธ๋ [1, 3]์ ๋๋ค.
์ค๋ ๋ ์ง๋ฅผ ์๋ฏธํ๋ ๋ฌธ์์ด today, ์ฝ๊ด์ ์ ํจ๊ธฐ๊ฐ์ ๋ด์ 1์ฐจ์ ๋ฌธ์์ด ๋ฐฐ์ด terms์ ์์ง๋ ๊ฐ์ธ์ ๋ณด์ ์ ๋ณด๋ฅผ ๋ด์ 1์ฐจ์ ๋ฌธ์์ด ๋ฐฐ์ด privacies๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ์ด๋ ํ๊ธฐํด์ผ ํ ๊ฐ์ธ์ ๋ณด์ ๋ฒํธ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก 1์ฐจ์ ์ ์ ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
๐ ์ ํ ์ฌํญ
- today๋ "YYYY.MM.DD" ํํ๋ก ์ค๋ ๋ ์ง๋ฅผ ๋ํ๋ ๋๋ค.
- 1 ≤ terms์ ๊ธธ์ด ≤ 20
- terms์ ์์๋ "์ฝ๊ด ์ข ๋ฅ ์ ํจ๊ธฐ๊ฐ" ํํ์ ์ฝ๊ด ์ข ๋ฅ์ ์ ํจ๊ธฐ๊ฐ์ ๊ณต๋ฐฑ ํ๋๋ก ๊ตฌ๋ถํ ๋ฌธ์์ด์ ๋๋ค.
- ์ฝ๊ด ์ข ๋ฅ๋ A~Z์ค ์ํ๋ฒณ ๋๋ฌธ์ ํ๋์ด๋ฉฐ, terms ๋ฐฐ์ด์์ ์ฝ๊ด ์ข ๋ฅ๋ ์ค๋ณต๋์ง ์์ต๋๋ค.
- ์ ํจ๊ธฐ๊ฐ์ ๊ฐ์ธ์ ๋ณด๋ฅผ ๋ณด๊ดํ ์ ์๋ ๋ฌ ์๋ฅผ ๋ํ๋ด๋ ์ ์์ด๋ฉฐ, 1 ์ด์ 100 ์ดํ์ ๋๋ค.
- 1 ≤ privacies์ ๊ธธ์ด ≤ 100
- privacies[i]๋ i+1๋ฒ ๊ฐ์ธ์ ๋ณด์ ์์ง ์ผ์์ ์ฝ๊ด ์ข ๋ฅ๋ฅผ ๋ํ๋ ๋๋ค.
- privacies์ ์์๋ "๋ ์ง ์ฝ๊ด ์ข ๋ฅ" ํํ์ ๋ ์ง์ ์ฝ๊ด ์ข ๋ฅ๋ฅผ ๊ณต๋ฐฑ ํ๋๋ก ๊ตฌ๋ถํ ๋ฌธ์์ด์ ๋๋ค.
- ๋ ์ง๋ "YYYY.MM.DD" ํํ์ ๊ฐ์ธ์ ๋ณด๊ฐ ์์ง๋ ๋ ์ง๋ฅผ ๋ํ๋ด๋ฉฐ, today ์ด์ ์ ๋ ์ง๋ง ์ฃผ์ด์ง๋๋ค.
- privacies์ ์ฝ๊ด ์ข ๋ฅ๋ ํญ์ terms์ ๋ํ๋ ์ฝ๊ด ์ข ๋ฅ๋ง ์ฃผ์ด์ง๋๋ค.
- today์ privacies์ ๋ฑ์ฅํ๋ ๋ ์ง์ YYYY๋ ์ฐ๋, MM์ ์, DD๋ ์ผ์ ๋ํ๋ด๋ฉฐ ์ (.) ํ๋๋ก ๊ตฌ๋ถ๋์ด ์์ต๋๋ค.
- 2000 ≤ YYYY ≤ 2022
- 1 ≤ MM ≤ 12
- MM์ด ํ ์๋ฆฟ์์ธ ๊ฒฝ์ฐ ์์ 0์ด ๋ถ์ต๋๋ค.
- 1 ≤ DD ≤ 28
- DD๊ฐ ํ ์๋ฆฟ์์ธ ๊ฒฝ์ฐ ์์ 0์ด ๋ถ์ต๋๋ค.
- ํ๊ธฐํด์ผ ํ ๊ฐ์ธ์ ๋ณด๊ฐ ํ๋ ์ด์ ์กด์ฌํ๋ ์ ๋ ฅ๋ง ์ฃผ์ด์ง๋๋ค.
๐ ์ ์ถ๋ ฅ ์

์ถ์ธก)
๋ฌธ์์ด์ธ ์ค๋ ๋ ์ง๋ฅผ ๊ฐ๊ฐ ์๋ผ ๋ฐฐ์ด๋ก ๋ฐ๊พธ๊ณ datetime ํ์ ์ผ๋ก ๋ณ๊ฒฝ
privacies๋ฅผ for๋ฌธ์ผ๋ก ๋๋ ค ๋ง๋ฃ๊ธฐ๊ฐ์ ๋ํ๋ด๋ ์ํ๋ฒณ๊ณผ ์์ง๋ ์ง๋ฅผ ์์งํ๊ณ , ์ด ์ํ๋ฒณ์ ๋ง๋ ๋ฌ์๋ฅผ ์ฐพ๋๋ค.
์ด ๋ฌ์๋ฅผ ์์ง๋ ์ง๋ฅผ ๊ฐ์ ์๋ฅธ๊ฒ ์ค ๋ฌ์ ๋ํด 12๊ฐ ์ด๊ณผํ๋ฉด ๋ ์๋ฅผ ์ฌ๋ฆฌ๊ณ ๋ฌ์ 12๋ก ๋๋ ๊ณ์ฐํ๊ณ 12๊ฐ ์ด๊ณผํ์ง ์์ผ๋ฉด ๊ทธ๋ฅ ๋ฌ์ ๋ํด ๋ง๋ฃ ๋ ์ง๋ฅผ datetime ํ์ ์ผ๋ก ๋ง๋ ๋ค
์ผ์๋ ๊ธฐ๊ฐ์ด ๋ฌ์ ๊ธฐ์ค์ผ๋ก ํ๋ฏ๋ก ๊ณ์ฐ์์๋ ์ ๊ฒฝ์ฐ์ง ์์ผ๋ ๋ ์ง ํ๋ณ์์๋ ์ด ์ผ์ ์ด์์ด๋ฉด ๋ง๋ฃ ํ๋ณ.
์ค๋ ๋ ์ง์ ๋ง๋ฃ ๋ ์ง๋ฅผ ์๋ก ๋น๊ตํด ์ค๋ ๋ ์ง๊ฐ ๋ ํฌ๋ฉด ์ธ๋ฑ์ค + 1 (๋ช๋ฒ์งธ๊ฒ์ ๋ง๋ฃํด์ผํ๋์ง ๋ฆฌํดํด์ผํ๋ฏ๋ก) ํ ๊ฐ์ ๋ฐฐ์ด์ appendํด ๋ฆฌํด
์์ค์ฝ๋)
* 1์ฐจ) ์ ํ์ฑ 25์ . ์คํจ ์ผ์ด์ค 7๋ฒ ๋นผ๊ณ ๋ ๋ฐํ์ ์๋ฌ
import datetime
def solution(today, terms, privacies):
result = []
today_list = today.split('.')
today_int_list = [int(one) for one in today_list]
today = datetime.date(today_int_list[0], today_int_list[1], today_int_list[2])
for i in range(len(privacies)) :
term_alphabet = privacies[i][-1]
month = 0
expired_date = privacies[i][0:-2]
date = ""
for term in terms :
if term[0] == term_alphabet :
month = term[2:]
data = expired_date.split('.')
data = [int(one) for one in data]
plus_month = data[1] + int(month)
if plus_month > 12 :
data[0] = data[0]+1
data[1] = plus_month % 12
else :
data[1] = plus_month
if today >= datetime.date(data[0], data[1], data[2]) :
result.append(i+1)
return result
2์ฐจ) ์ฑ๊ณต : ๋ฉ๋ชจ๋ฆฌ: 10.3 MB, ์๊ฐ: 0.34 ms
def solution(today, terms, privacies):
result = []
t_year, t_month, t_day = today.split('.')
for i in range(len(privacies)) :
days = 0
term_alphabet = privacies[i][-1]
c_year, c_month, c_day = privacies[i][0:-2].split('.')
for term in terms :
if term[0] == term_alphabet :
days = int(term[2:])*28
print(days)
diff_year = int(t_year) - int(c_year)
diff_month = int(t_month) - int(c_month)
diff_day = int(t_day) - int(c_day)
diff_days = (diff_year * 28 * 12) + (diff_month * 28) + diff_day
if diff_days >= days :
result.append(i+1)
return result
๋ฆฌ๋ทฐ)
์ฒซ๋ฒ์งธ์์ for๋ฌธ์ด๋ผ๋๊ฐ datetime์ผ๋ก ๋ฐ๊พผ๋ค๋๊ฐ ํ๋ ์ ๋ฑ์ด ๋ค์ด๊ฐ๋ ๊ฑธ ๋ค ์ค์ฌ๋ณด๋ ค๊ณ ์ ์ฒด์ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ๋ฐ๊ฟ.
์ ์ด์ ํ๋ฌ์ด 28์ผ๋ก ๊ฐ์ ํ๋๊ฑฐ๋ผ ๊ธฐ์กด datetime์ผ๋ก ๋ฐ๊ฟ์ ๋น๊ตํ๋๊ฒ ๋ณด๋ค๋ ๊ณ์ฐ์์ ๋ง๋๋๊ฒ ๋ง๋ค๊ณ ์๊ฐํด์ ๊ทธ๋ผ ์ด๊ฑธ ์ด๋ค์์ผ๋ก ๋ฐ๊ฟ๊น ํ๋ค๊ฐ, ๋ง๋ฃ ๊ธฐ๊ฐ์ ๋ ์ง๋ก ํ์ํ๊ณ , ํ์ฌ ๋ ์ง - ์์งํ ๋ ์ง๋ฅผ ๊ณ์ฐํ์ ๋ ์ฐจ์ด๋ ๋น๊ตํ๋ฉด ๋์ง ์์๊น ์ถ์ด์ ์ด์ชฝ ์ฒ๋ฆฌ๋ก ๋ณ๊ฒฝ
์ฝ๋๋ ํจ์ฌ ๊ฐ๋จ ๋ช ๋ฃํด์ง
'Coding Test > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Programmers] [1์ฐจ] ๋น๋ฐ์ง๋ (0) | 2023.02.28 |
|---|---|
| Programmers] ์ผ์ด์ฌ (0) | 2023.02.23 |
| Programmers] ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ (0) | 2023.02.22 |
| Programmers] ๋๋ง์ ์ํธ (0) | 2023.02.21 |
| Programmers] ์ฝ๋ผ ๋ฌธ์ (0) | 2023.02.13 |
