๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โŒจ๏ธ Language/swift

[Swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV.1 ๊ฐœ์ธ์ •๋ณด ์ˆ˜์ง‘ ์œ ํšจ๊ธฐ๊ฐ„

by hyebin (Helia) 2023. 3. 17.
๋ฐ˜์‘ํ˜•
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 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์„ ๊ณฑํ•˜๋ฉด ์ด๋ฉฐ์น ์ธ์ง€ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.)

 

๋ฐ˜์‘ํ˜•