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

[Swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV.1 ๋Œ€์ถฉ ๋งŒ๋“  ์žํŒ

by hyebin (Helia) 2023. 3. 19.
๋ฐ˜์‘ํ˜•
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV.1 ๋ชจ์Œ

๋Œ€์ถฉ ๋งŒ๋“  ์žํŒ

๋ฌธ์ œ ์„ค๋ช…

ํœด๋Œ€ํฐ์˜ ์žํŒ์€ ์ปดํ“จํ„ฐ ํ‚ค๋ณด๋“œ ์žํŒ๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ํ•˜๋‚˜์˜ ํ‚ค์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์ž๊ฐ€ ํ• ๋‹น๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‚ค ํ•˜๋‚˜์— ์—ฌ๋Ÿฌ ๋ฌธ์ž๊ฐ€ ํ• ๋‹น๋œ ๊ฒฝ์šฐ, ๋™์ผํ•œ ํ‚ค๋ฅผ ์—ฐ์†ํ•ด์„œ ๋น ๋ฅด๊ฒŒ ๋ˆ„๋ฅด๋ฉด ํ• ๋‹น๋œ ์ˆœ์„œ๋Œ€๋กœ ๋ฌธ์ž๊ฐ€ ๋ฐ”๋€๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, 1๋ฒˆ ํ‚ค์— "A", "B", "C" ์ˆœ์„œ๋Œ€๋กœ ๋ฌธ์ž๊ฐ€ ํ• ๋‹น๋˜์–ด ์žˆ๋‹ค๋ฉด 1๋ฒˆ ํ‚ค๋ฅผ ํ•œ ๋ฒˆ ๋ˆ„๋ฅด๋ฉด "A", ๋‘ ๋ฒˆ ๋ˆ„๋ฅด๋ฉด "B", ์„ธ ๋ฒˆ ๋ˆ„๋ฅด๋ฉด "C"๊ฐ€ ๋˜๋Š” ์‹์ž…๋‹ˆ๋‹ค.

๊ฐ™์€ ๊ทœ์น™์„ ์ ์šฉํ•ด ์•„๋ฌด๋ ‡๊ฒŒ๋‚˜ ๋งŒ๋“  ํœด๋Œ€ํฐ ์žํŒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํœด๋Œ€ํฐ ์žํŒ์€ ํ‚ค์˜ ๊ฐœ์ˆ˜๊ฐ€ 1๊ฐœ๋ถ€ํ„ฐ ์ตœ๋Œ€ 100๊ฐœ๊นŒ์ง€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠน์ • ํ‚ค๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ์ž…๋ ฅ๋˜๋Š” ๋ฌธ์ž๋“ค๋„ ๋ฌด์ž‘์œ„๋กœ ๋ฐฐ์—ด๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜, ๊ฐ™์€ ๋ฌธ์ž๊ฐ€ ์žํŒ ์ „์ฒด์— ์—ฌ๋Ÿฌ ๋ฒˆ ํ• ๋‹น๋œ ๊ฒฝ์šฐ๋„ ์žˆ๊ณ , ํ‚ค ํ•˜๋‚˜์— ๊ฐ™์€ ๋ฌธ์ž๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ํ• ๋‹น๋œ ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ฌ์ง€์–ด ์•„์˜ˆ ํ• ๋‹น๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ช‡๋ช‡ ๋ฌธ์ž์—ด์€ ์ž‘์„ฑํ•  ์ˆ˜ ์—†์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด ํœด๋Œ€ํฐ ์žํŒ์„ ์ด์šฉํ•ด ํŠน์ • ๋ฌธ์ž์—ด์„ ์ž‘์„ฑํ•  ๋•Œ, ํ‚ค๋ฅผ ์ตœ์†Œ ๋ช‡ ๋ฒˆ ๋ˆŒ๋Ÿฌ์•ผ ๊ทธ ๋ฌธ์ž์—ด์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

1๋ฒˆ ํ‚ค๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ํ• ๋‹น๋œ ๋ฌธ์ž๋“ค์ด ์ˆœ์„œ๋Œ€๋กœ ๋‹ด๊ธด ๋ฌธ์ž์—ด๋ฐฐ์—ด keymap๊ณผ ์ž…๋ ฅํ•˜๋ ค๋Š” ๋ฌธ์ž์—ด๋“ค์ด ๋‹ด๊ธด ๋ฌธ์ž์—ด ๋ฐฐ์—ด targets๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฐ ๋ฌธ์ž์—ด์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ‚ค๋ฅผ ์ตœ์†Œ ๋ช‡ ๋ฒˆ์”ฉ ๋ˆŒ๋Ÿฌ์•ผ ํ•˜๋Š”์ง€ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

 

๋‹จ, ๋ชฉํ‘œ ๋ฌธ์ž์—ด์„ ์ž‘์„ฑํ•  ์ˆ˜ ์—†์„ ๋•Œ๋Š” -1์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ œํ•œ ์‚ฌํ•ญ

  • 1 ≤ keymap์˜ ๊ธธ์ด ≤ 100
    • 1 ≤ keymap์˜ ์›์†Œ์˜ ๊ธธ์ด ≤ 100
    • keymap[i]๋Š” i + 1๋ฒˆ ํ‚ค๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ”๋€Œ๋Š” ๋ฌธ์ž๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
      • ์˜ˆ๋ฅผ ๋“ค์–ด keymap[0] = "ABACD"์ธ ๊ฒฝ์šฐ 1๋ฒˆ ํ‚ค๋ฅผ ํ•œ ๋ฒˆ ๋ˆ„๋ฅด๋ฉด A, ๋‘ ๋ฒˆ ๋ˆ„๋ฅด๋ฉด B, ์„ธ ๋ฒˆ ๋ˆ„๋ฅด๋ฉด A ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
    • keymap์˜ ์›์†Œ์˜ ๊ธธ์ด๋Š” ์„œ๋กœ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • keymap์˜ ์›์†Œ๋Š” ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 1 ≤ targets์˜ ๊ธธ์ด ≤ 100
    • 1 ≤ targets์˜ ์›์†Œ์˜ ๊ธธ์ด ≤ 100
    • targets์˜ ์›์†Œ๋Š” ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

keymap targets result
["ABACD", "BCEFD"] ["ABCD","AABB"] [9, 4]
["AA"] ["B"] [-1]
["AGZ", "BSSS"] ["ASA","BGZ"] [4, 6]

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • "ABCD"์˜ ๊ฒฝ์šฐ,
  • 1๋ฒˆ ํ‚ค ํ•œ ๋ฒˆ → A
  • 2๋ฒˆ ํ‚ค ํ•œ ๋ฒˆ → B
  • 2๋ฒˆ ํ‚ค ๋‘ ๋ฒˆ → C
  • 1๋ฒˆ ํ‚ค ๋‹ค์„ฏ ๋ฒˆ → D
  • ๋”ฐ๋ผ์„œ ์ดํ•ฉ์ธ 9๋ฅผ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • "AABB"์˜ ๊ฒฝ์šฐ,
  • 1๋ฒˆ ํ‚ค ํ•œ ๋ฒˆ → A
  • 1๋ฒˆ ํ‚ค ํ•œ ๋ฒˆ → A
  • 2๋ฒˆ ํ‚ค ํ•œ ๋ฒˆ → B
  • 2๋ฒˆ ํ‚ค ํ•œ ๋ฒˆ → B
  • ๋”ฐ๋ผ์„œ ์ดํ•ฉ์ธ 4๋ฅผ ๋‘ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒฐ๊ณผ์ ์œผ๋กœ [9,4]๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • "B"์˜ ๊ฒฝ์šฐ, 'B'๊ฐ€ ์–ด๋””์—๋„ ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— -1์„ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒฐ๊ณผ์ ์œผ๋กœ [-1]์„ return ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #3

  • "ASA"์˜ ๊ฒฝ์šฐ,
  • 1๋ฒˆ ํ‚ค ํ•œ ๋ฒˆ → A
  • 2๋ฒˆ ํ‚ค ๋‘ ๋ฒˆ → S
  • 1๋ฒˆ ํ‚ค ํ•œ ๋ฒˆ → A
  • ๋”ฐ๋ผ์„œ ์ดํ•ฉ์ธ 4๋ฅผ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • "BGZ"์˜ ๊ฒฝ์šฐ,
  • 2๋ฒˆ ํ‚ค ํ•œ ๋ฒˆ → B
  • 1๋ฒˆ ํ‚ค ๋‘ ๋ฒˆ → G
  • 1๋ฒˆ ํ‚ค ์„ธ ๋ฒˆ → Z
  • ๋”ฐ๋ผ์„œ ์ดํ•ฉ์ธ 6์„ ๋‘ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒฐ๊ณผ์ ์œผ๋กœ [4, 6]์„ return ํ•ฉ๋‹ˆ๋‹ค.

์ œ์ถœ

import Foundation

func solution(_ keymap:[String], _ targets:[String]) -> [Int] {
    var dict = [String: Int]()
    var keymap = keymap.map{$0.map{String($0)}}
    var result = [Int]()
    
    for k in keymap{
        for i in k{
            if dict[i] == nil {
                dict[i] = k.firstIndex(of: i)!
            }else{
                dict[i] = min(dict[i]!, k.firstIndex(of: i)!)
            }
        }
    }
    
    for target in targets {
        var sum = 0
        for t in target.map{String($0)} {
            if dict[t] == nil {
                sum = -1
                break
            }else{
                sum += dict[t]!+1
            }
        }
        result.append(sum)
    }
    
    return result
}
keymap์˜ ๋ฌธ์ž๋ฅผ key๋กœ ์ˆœ์„œ๋ฅผ value๋กœ ๊ฐ–๋Š” ๋”•์…”๋„ˆ๋ฆฌ dict๋ฅผ ์„ ์–ธํ•œ๋‹ค.
keymap์€ Stringํ˜• 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ๊ฒฐ๊ด๊ฐ’์„ ์ €์žฅํ•  Intํ˜• ๋ฐฐ์—ด  result๋ฅผ ์„ ์–ธํ•œ๋‹ค.

keymap์—์„œ ๋ฌธ์ž๋ฅผ dict์— ์ฒ˜์Œ ์ถ”๊ฐ€ํ•  ๋•Œ(value == nil), ๋ฌธ์ž์˜ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ์ €์žฅํ•œ๋‹ค.
์ด๋ฏธ dict์— ๋ฌธ์ž๋ฅผ key๋กœ ๊ฐ–๋Š” value๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, ๊ธฐ์กด value๊ฐ’๊ณผ ๋ฌธ์ž์˜ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค ์ค‘์—์„œ ์ž‘์€ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
(์ž…์ถœ๋ ฅ ์˜ˆ์‹œ 1์—์„œ ์ฒซ ๋ฒˆ์งธ keymap์—์„œ "B"์˜ ์œ„์น˜๋Š” 1๋ฒˆ์ธ๋ฐ, ๋‘ ๋ฒˆ์งธ keymap์—์„œ๋Š” 0๋ฒˆ์ด๋‹ค. ์ด๋Ÿด ๊ฒฝ์šฐ 0์ด ์ €์žฅ๋œ๋‹ค)

tartgets๋ฐฐ์—ด์—์„œ target์˜ ๋ฌธ์ž๊ฐ€ dict์— ์—†๋‹ค๋ฉด sum ๋ณ€์ˆ˜์— -1์„ ์ €์žฅํ•˜๊ณ  for๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค.
target์˜ ๋ฌธ์ž๊ฐ€ dict์— ์žˆ๋‹ค๋ฉด, sum์— dict[t]+1์„ ๋”ํ•œ๋‹ค.
result์— sum์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
๋ฐ˜์‘ํ˜•