ํ๋ก๊ทธ๋๋จธ์ค LV.1 ๋ชจ์
๊ฐ์ธ์ ๋ณด ์์ง ์ ํจ๊ธฐ๊ฐ
๋ฌธ์ ์ค๋ช
๊ณ ๊ฐ์ ์ฝ๊ด ๋์๋ฅผ ์ป์ด์ ์์ง๋ 1~n๋ฒ์ผ๋ก ๋ถ๋ฅ๋๋ ๊ฐ์ธ์ ๋ณด n๊ฐ๊ฐ ์์ต๋๋ค. ์ฝ๊ด ์ข ๋ฅ๋ ์ฌ๋ฌ ๊ฐ์ง ์์ผ๋ฉฐ ๊ฐ ์ฝ๊ด๋ง๋ค ๊ฐ์ธ์ ๋ณด ๋ณด๊ด ์ ํจ๊ธฐ๊ฐ์ด ์ ํด์ ธ ์์ต๋๋ค. ๋น์ ์ ๊ฐ ๊ฐ์ธ์ ๋ณด๊ฐ ์ด๋ค ์ฝ๊ด์ผ๋ก ์์ง๋๋์ง ์๊ณ ์์ต๋๋ค. ์์ง๋ ๊ฐ์ธ์ ๋ณด๋ ์ ํจ๊ธฐ๊ฐ ์ ๊น์ง๋ง ๋ณด๊ด ๊ฐ๋ฅํ๋ฉฐ, ์ ํจ๊ธฐ๊ฐ์ด ์ง๋ฌ๋ค๋ฉด ๋ฐ๋์ ํ๊ธฐํด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, A๋ผ๋ ์ฝ๊ด์ ์ ํจ๊ธฐ๊ฐ์ด 12 ๋ฌ์ด๊ณ , 2021๋ 1์ 5์ผ์ ์์ง๋ ๊ฐ์ธ์ ๋ณด๊ฐ A์ฝ๊ด์ผ๋ก ์์ง๋์๋ค๋ฉด ํด๋น ๊ฐ์ธ์ ๋ณด๋ 2022๋ 1์ 4์ผ๊น์ง ๋ณด๊ด ๊ฐ๋ฅํ๋ฉฐ 2022๋ 1์ 5์ผ๋ถํฐ ํ๊ธฐํด์ผ ํ ๊ฐ์ธ์ ๋ณด์ ๋๋ค. ๋น์ ์ ์ค๋ ๋ ์ง๋ก ํ๊ธฐํด์ผ ํ ๊ฐ์ธ์ ๋ณด ๋ฒํธ๋ค์ ๊ตฌํ๋ ค ํฉ๋๋ค.
๋ชจ๋ ๋ฌ์ 28์ผ๊น์ง ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
๋ค์์ ์ค๋ ๋ ์ง๊ฐ 2022.05.19์ผ ๋์ ์์์ ๋๋ค.
์ฝ๊ด ์ข ๋ฅ | ์ ํจ๊ธฐ๊ฐ |
A | 6๋ฌ |
B | 12๋ฌ |
C | 3๋ฌ |
๋ฒํธ | ๊ฐ์ธ์ ๋ณด ์์ง ์ผ์ | ์ฝ๊ด ์ข ๋ฅ |
1 | 2021.05.02 | A |
2 | 2021.07.01 | B |
3 | 2022.02.19 | C |
4 | 2022.02.20 | C |
- ์ฒซ ๋ฒ์งธ ๊ฐ์ธ์ ๋ณด๋ 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์ด ๋ถ์ต๋๋ค.
- ํ๊ธฐํด์ผ ํ ๊ฐ์ธ์ ๋ณด๊ฐ ํ๋ ์ด์ ์กด์ฌํ๋ ์ ๋ ฅ๋ง ์ฃผ์ด์ง๋๋ค.
์ ์ถ๋ ฅ ์
today | terms | privacies | result |
"2022.05.19" | ["A 6", "B 12", "C 3"] | ["2021.05.02 A", "2021.07.01 B", "2022.02.19 C", "2022.02.20 C"] | [1, 3] |
"2020.01.01" | ["Z 3", "D 5"] | ["2019.01.01 D", "2019.11.15 Z", "2019.08.02 D", "2019.07.01 D", "2018.12.28 Z"] | [1, 4, 5] |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
- ๋ฌธ์ ์์์ ๊ฐ์ต๋๋ค.
์ ์ถ๋ ฅ ์ #2
์ฝ๊ด ์ข ๋ฅ | ์ ํจ๊ธฐ๊ฐ |
Z | 3๋ฌ |
D | 5๋ฌ |
๋ฒํธ | ๊ฐ์ธ์ ๋ณด ์์ง ์ผ์ | ์ฝ๊ด ์ข ๋ฅ |
1 | 2019.01.01 | D |
2 | 2019.11.15 | Z |
3 | 2019.08.02 | D |
4 | 2019.07.01 | D |
5 | 2018.12.28 | Z |
- ์ค๋ ๋ ์ง๋ 2020๋ 1์ 1์ผ์ ๋๋ค.
- ์ฒซ ๋ฒ์งธ ๊ฐ์ธ์ ๋ณด๋ D์ฝ๊ด์ ์ํด 2019๋ 5์ 28์ผ๊น์ง ๋ณด๊ด ๊ฐ๋ฅํ๋ฉฐ, ์ ํจ๊ธฐ๊ฐ์ด ์ง๋ฌ์ผ๋ฏ๋ก ํ๊ธฐํด์ผ ํ ๊ฐ์ธ์ ๋ณด์ ๋๋ค.
- ๋ ๋ฒ์งธ ๊ฐ์ธ์ ๋ณด๋ Z์ฝ๊ด์ ์ํด 2020๋ 2์ 14์ผ๊น์ง ๋ณด๊ด ๊ฐ๋ฅํ๋ฉฐ, ์ ํจ๊ธฐ๊ฐ์ด ์ง๋์ง ์์์ผ๋ฏ๋ก ์์ง ๋ณด๊ด ๊ฐ๋ฅํฉ๋๋ค.
- ์ธ ๋ฒ์งธ ๊ฐ์ธ์ ๋ณด๋ D์ฝ๊ด์ ์ํด 2020๋ 1์ 1์ผ๊น์ง ๋ณด๊ด ๊ฐ๋ฅํ๋ฉฐ, ์ ํจ๊ธฐ๊ฐ์ด ์ง๋์ง ์์์ผ๋ฏ๋ก ์์ง ๋ณด๊ด ๊ฐ๋ฅํฉ๋๋ค.
- ๋ค ๋ฒ์งธ ๊ฐ์ธ์ ๋ณด๋ D์ฝ๊ด์ ์ํด 2019๋ 11์ 28์ผ๊น์ง ๋ณด๊ด ๊ฐ๋ฅํ๋ฉฐ, ์ ํจ๊ธฐ๊ฐ์ด ์ง๋ฌ์ผ๋ฏ๋ก ํ๊ธฐํด์ผ ํ ๊ฐ์ธ์ ๋ณด์ ๋๋ค.
- ๋ค์ฏ ๋ฒ์งธ ๊ฐ์ธ์ ๋ณด๋ Z์ฝ๊ด์ ์ํด 2019๋ 3์ 27์ผ๊น์ง ๋ณด๊ด ๊ฐ๋ฅํ๋ฉฐ, ์ ํจ๊ธฐ๊ฐ์ด ์ง๋ฌ์ผ๋ฏ๋ก ํ๊ธฐํด์ผ ํ ๊ฐ์ธ์ ๋ณด์ ๋๋ค.
์ ์ถ
import Foundation
func solution(_ today:String, _ terms:[String], _ privacies:[String]) -> [Int] {
var today = today.split(separator: ".").map{Int(String($0))!}
var dict = [String: Int]()
var result = [Int]()
for term in terms {
let temp = term.split(separator: " ").map{String($0)}
dict[temp[0]] = Int(temp[1])!
}
for (i, privacy) in privacies.enumerated() {
let p = privacy.split(separator: " ").map{String($0)}
var day = p[0].split(separator: ".").map{Int(String($0))!}
if day[2] == 1{
day[2] = 28
day[1] -= 1
}else{
day[2] -= 1
}
day[1] += dict[p[1]] ?? 0
if day[1] > 12{
var t = day[1]/12
t = day[1] % 12 == 0 ? t-1 : t
day[1] %= 12
day[1] = day[1] == 0 ? 12 : day[1]
day[0] += t
}
if day[0] < today[0] {result.append(i+1)}
else if day[0] == today[0]{
if day[1] < today[1]{result.append(i+1)}
else if day[1] == today[1] {
if day[2] < today[2]{result.append(i+1)}
}
}
}
return result
}
์ ๋ ฅ๋ฐ์ ์ค๋์ ๋ ์ง today๋ฅผ "."๊ธฐ์ค์ผ๋ก ๋๋ ๋ , ์, ์ผ ์์ผ๋ก ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
์ฝ๊ด ์ข ๋ฅ๋ฅผ key๋ก, ์ ํจ๊ธฐ๊ฐ์ value๋ก ๊ฐ๋ ๋์ ๋๋ฆฌ dict๋ฅผ ์ ์ธํ๋ค.
๊ฒฐ๊ด๊ฐ์ ์ ์ฅํ result ๋ณ์๋ฅผ ์์ฑํ๋ค.
term๋ฐฐ์ด์ ์์๋ฅผ ๊ณต๋ฐฑ ๊ธฐ์ค์ ๋๋ ํ dict์ key๋ ์ฝ๊ด ์ข ๋ฅ, value๋ ์ ํจ๊ธฐ๊ฐ์ ์ ์ฅํ๋ค.
<์ฐ์ฐ์ ์ํ ์ค๋น>
privacies ๋ฐฐ์ด์ ์์๋ฅผ ๊ณต๋ฐฑ ๊ธฐ์ค์ผ๋ก ๋๋ ํ p์ ์ ์ฅํ๋ค. (0๋ฒ์งธ ์์๋ ๋ ์ง (2021.05.02), 1๋ฒ์งธ ์์๋ ์ฝ๊ด ์ข ๋ฅ(A))
์ดํ p์ 0๋ฒ์งธ ์์๋ฅผ "." ๊ธฐ์ค์ผ๋ก ๋๋ ํ Int๋ก ๋ณํํ์ฌ day์ ์ ์ฅํ๋ค. (0๋ฒ์งธ ์์๋ ๋ (2021), 1๋ฒ์งธ ์์๋ ์(5), 2๋ฒ์งธ ์์๋ ์ผ(2))
๋ง์ฝ day [2](์ผ)๊ฐ 1์ด๋ผ๋ฉด day [2]๋ฅผ 28๋ก ๋ฐ๊พผ ํ, day [1]์์ 1์ ๋บ๋ค. ์๋๋ผ๋ฉด day [2]์์ 1์ ๋บ๋ค. (์์ง์ผ์+์ ํจ๊ธฐ๊ฐ-1์ผ์ด ๋ณด๊ด ๊ฐ๋ฅ ๊ธฐ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์ผ์์ 1์ ๋นผ์ค)
<๋ณด๊ด ๊ฐ๋ฅํ ๊ธฐ๊ฐ ์ฐ์ฐ>
day [1](์)์ ํด๋น์ฝ๊ด์ ์ ํจ๊ธฐ๊ฐ์ ๋ํ๋ค.
day [1]์ด 12๋ณด๋ค ํฌ๋ค๋ฉด, day [1]/12๋ฅผ t์ ์ ์ฅํ๋ค. day [1]%12๊ฐ 0์ด๋ผ๋ฉด t์์ 1์ ๋บ๋ค. (day [1]์ด 24์ธ ๊ฒฝ์ฐ t๋ 1์ด์ด์ผ ํจ)
์ดํ day [1]์ 12๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ ์ฅํ๊ณ , ์ด ๊ฐ์ด 0์ด๋ผ๋ฉด 12๋ฅผ ์ ์ฅํ๋ค. (day [1]์ด 24์ธ ๊ฒฝ์ฐ 12๊ฐ ์ ์ฅ๋์ด์ผ ํจ)
day [0]์๋ t๋ฅผ ๋ํ๋ค.
<ํ์ฌ ๋ ์ง์ ๋น๊ต๋ฅผ ํตํด ๋ณด๊ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๊ฒฐ๊ด๊ฐ์ ์ถ๊ฐ>
day [0]์ด ์๋ค๋ฉด result์ ํ์ฌ ์ธ๋ฑ์ค+1์ ์ ์ฅํ๋ค (๊ฒฐ๊ด๊ฐ์ ์ธ๋ฑ์ค๋ 1๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์)
day [0]์ด ๊ฐ์ ๊ฒฝ์ฐ, day [1]์ด today [1]๋ณด๋ค ์๋ค๋ฉด result์ ํ์ฌ ์ธ๋ฑ์ค+1์ ์ ์ฅํ๋ค.
day [1]์ด ๊ฐ์ ๊ฒฝ์ฐ, day [2]๊ฐ today [2]๋ณด๋ค ์๋ค๋ฉด result์ ํ์ฌ ์ธ๋ฑ์ค+1์ ์ ์ฅํ๋ค.
๋ค๋ฅธ ํ์ด
import Foundation
func solution(_ today: String, _ terms: [String], _ privacies: [String]) -> [Int] {
var answer = [Int]()
var termDict = [String: Int]()
let date = getDate(today)
for s in terms {
let term = s.components(separatedBy: " ")
termDict[term[0]] = Int(term[1])
}
for i in privacies.indices {
let privacy = privacies[i].components(separatedBy: " ")
if getDate(privacy[0]) + (termDict[privacy[1]] ?? 0) * 28 <= date {
answer.append(i + 1)
}
}
return answer
}
private func getDate(_ today: String) -> Int {
let date = today.split(separator: ".")
let year = Int(date[0]) ?? 0
let month = Int(date[1]) ?? 0
let day = Int(date[2]) ?? 0
return (year * 12 * 28) + (month * 28) + day
}
getData ํจ์๋ฅผ ์์ฑํ์ฌ, ๋ฌธ์์ด์ ์ ๋ ฅ๋ฐ์ ๋ , ์, ์ผ๋ก ๋๋ ํ ์ด๋ฅผ ์ฐ์ฐํด ์ด๋ฉฐ์น ์ธ์ง ๋ฐํํ๋ค.
์ฝ๊ด ์ข ๋ฅ๋ฅผ key๋ก, ์ ํจ๊ธฐ๊ฐ์ value๋ก ๊ฐ๋ ๋์ ๋๋ฆฌ termDict๋ฅผ ์ ์ธํ๊ณ , ๊ฒฐ๊ด๊ฐ์ ์ ์ฅํ answer ๋ณ์๋ฅผ ์์ฑํ๋ค.
getDataํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฅ๋ฐ์ ํ์ฌ ๋ ์ง today๋ฅผ ์ด๋ฉฐ์น ์ธ์ง๋ฅผ day์ ์ ์ฅํ๋ค.
term๋ฐฐ์ด์ ์์๋ฅผ ๊ณต๋ฐฑ ๊ธฐ์ค์ ๋๋ ํ termDict์ key๋ ์ฝ๊ด ์ข ๋ฅ, value๋ ์ ํจ๊ธฐ๊ฐ์ ์ ์ฅํ๋ค.
privacies.indices๋ฅผ ์ฌ์ฉํ์ฌ privacies์ ์ธ๋ฑ์ค๋ฅผ 0๋ถํฐ i์ ์ ์ฅํ๋ค.
privacies์ i๋ฒ์งธ ์์๋ฅผ ๊ณต๋ฐฑ ๊ธฐ์ค์ผ๋ก ๋๋ ํ privacy์ ์ ์ฅํ๋ค.
getData ํจ์๋ฅผ ์ฌ์ฉํ์ฌ privacy [0]์ ์ด๋ฉฐ์น ์ธ์ง ๋ณํํ๋ค. ์ด ๊ฐ์ termDict [privacy [0]]*28์ ๋ํ์ ๋ day๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด answer์ i+1์ ์ถ๊ฐํ๋ค.
(ํ ๋ฌ์ 28์ผ์ด๊ธฐ ๋๋ฌธ์ ์ ํจ๊ธฐ๊ฐ์ 28์ ๊ณฑํ๋ฉด ์ด๋ฉฐ์น ์ธ์ง ๊ณ์ฐํ ์ ์๋ค.)
'โจ๏ธ Language > swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ํ๋ก๊ทธ๋๋จธ์ค LV.1 ์นด๋ ๋ญ์น (0) | 2023.03.18 |
---|---|
[Swift] ํ๋ก๊ทธ๋๋จธ์ค LV.1 ๋๋ง์ ์ํธ (0) | 2023.03.18 |
[Swift] ํ๋ก๊ทธ๋๋จธ์ค LV.1 ํฌ๊ธฐ๊ฐ ์์ ๋ถ๋ถ๋ฌธ์์ด (0) | 2023.03.17 |
[Swift] ํ๋ก๊ทธ๋๋จธ์ค LV.1 ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ์ ๊ธ์ (0) | 2023.03.16 |
[Swift] ํ๋ก๊ทธ๋๋จธ์ค LV.1 ๋ฌธ์์ด ๋๋๊ธฐ (0) | 2023.03.16 |