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

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

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

๋‘˜๋งŒ์˜ ์•”ํ˜ธ

๋ฌธ์ œ ์„ค๋ช…

๋‘ ๋ฌธ์ž์—ด s์™€ skip, ๊ทธ๋ฆฌ๊ณ  ์ž์—ฐ์ˆ˜ index๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋‹ค์Œ ๊ทœ์น™์— ๋”ฐ๋ผ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค๋ ค ํ•ฉ๋‹ˆ๋‹ค. ์•”ํ˜ธ์˜ ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ฌธ์ž์—ด s์˜ ๊ฐ ์•ŒํŒŒ๋ฒณ์„ index๋งŒํผ ๋’ค์˜ ์•ŒํŒŒ๋ฒณ์œผ๋กœ ๋ฐ”๊ฟ”์ค๋‹ˆ๋‹ค.
  • index๋งŒํผ์˜ ๋’ค์˜ ์•ŒํŒŒ๋ฒณ์ด z๋ฅผ ๋„˜์–ด๊ฐˆ ๊ฒฝ์šฐ ๋‹ค์‹œ a๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.
  • skip์— ์žˆ๋Š” ์•ŒํŒŒ๋ฒณ์€ ์ œ์™ธํ•˜๊ณ  ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด s = "aukks", skip = "wbqd", index = 5์ผ ๋•Œ, a์—์„œ 5๋งŒํผ ๋’ค์— ์žˆ๋Š” ์•ŒํŒŒ๋ฒณ์€ f์ง€๋งŒ [b, c, d, e, f]์—์„œ 'b'์™€ 'd'๋Š” skip์— ํฌํ•จ๋˜๋ฏ€๋กœ ์„ธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 'b', 'd'๋ฅผ ์ œ์™ธํ•˜๊ณ  'a'์—์„œ 5๋งŒํผ ๋’ค์— ์žˆ๋Š” ์•ŒํŒŒ๋ฒณ์€ [c, e, f, g, h] ์ˆœ์„œ์— ์˜ํ•ด 'h'๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ "ukks" ๋˜ํ•œ ์œ„ ๊ทœ์น™๋Œ€๋กœ ๋ฐ”๊พธ๋ฉด "appy"๊ฐ€ ๋˜๋ฉฐ ๊ฒฐ๊ณผ๋Š” "happy"๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

๋‘ ๋ฌธ์ž์—ด s์™€ skip, ๊ทธ๋ฆฌ๊ณ  ์ž์—ฐ์ˆ˜ index๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ ์œ„ ๊ทœ์น™๋Œ€๋กœ s๋ฅผ ๋ณ€ํ™˜ํ•œ ๊ฒฐ๊ณผ๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • 5 ≤ s์˜ ๊ธธ์ด ≤ 50
  • 1 ≤ skip์˜ ๊ธธ์ด ≤ 10
  • s์™€ skip์€ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
    • skip์— ํฌํ•จ๋˜๋Š” ์•ŒํŒŒ๋ฒณ์€ s์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • 1 ≤ index ≤ 20

์ž…์ถœ๋ ฅ ์˜ˆ

s skip index result
"aukks" "wbqd" 5 "happy"

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

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

  • ๋ณธ๋ฌธ ๋‚ด์šฉ๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

์ œ์ถœ

import Foundation

func solution(_ s:String, _ skip:String, _ index:Int) -> String {
    func find(_ ch: Int) -> String{
        var cnt = 0, pos = 1
        var target = ch
        while cnt < index{
            pos = pos > 26 ? 1 : pos
            target = ch+pos > 122 ? ch+pos-26 : ch+pos

            if !skip.contains(String(UnicodeScalar(target)!)){
                cnt += 1
            }
            pos += 1
        }
        return target > 122 ? String(UnicodeScalar(target-26)!) : String(UnicodeScalar(target)!)
    }

    var result = ""

    for i in s{
        result += find(Int(i.asciiValue!))
    }

    return result
}

 

<find ํ•จ์ˆ˜ ๋™์ž‘>
find ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ด ์•ŒํŒŒ๋ฒณ์˜ ์•„์Šคํ‚ค์ฝ”๋“œ ๊ฐ’์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š”๋‹ค.
๋ณ€์ˆ˜ cnt๋Š” 0์œผ๋กœ, pos๋Š” 1๋กœ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ์ƒ์„ฑํ•œ๋‹ค.

cnt๊ฐ€ index๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ์—๋งŒ while๋ฌธ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
pos๊ฐ€ 26๋ณด๋‹ค ํฌ๋‹ค๋ฉด 1๋กœ ๊ฐ’์„ ๋ฐ”๊พผ๋‹ค. (pos๋Š” ์•ŒํŒŒ๋ฒณ์„ ๊ฐ€๋ฆฌํ‚ค๊ธฐ ๋•Œ๋ฌธ์— 1 <= pos <= 26์ด๋‹ค.)
target์€ pos+cnt์ธ๋ฐ, ์ด ๊ฐ’์ด 122๋ณด๋‹ค ํฌ๋‹ค๋ฉด 26์„ ๋บ€๋‹ค. (target์€ ์•„์Šคํ‚ค์ฝ”๋“œ ๊ฐ’์„ ์ €์žฅํ•จ, ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž์˜ ์•„์Šคํ‚ค์ฝ”๋“œ๋Š” 97๋ถ€ํ„ฐ 122์ด๊ธฐ ๋•Œ๋ฌธ์— 122๋ณด๋‹ค ํฌ๋‹ค๋ฉด 26์„ ๋บ€๋‹ค.)
target์„ ์•ŒํŒŒ๋ฒณ์œผ๋กœ ๋ณ€ํ™˜ํ–ˆ์„ ๋•Œ, skip์— ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด cnt๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
pos๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

์ตœ์ข… tartget์ด 122๋ณด๋‹ค ํฌ๋‹ค๋ฉด target-26์„, ์•„๋‹ˆ๋ผ๋ฉด tartget์„ ์•ŒํŒŒ๋ฒณ์œผ๋กœ ๋ณ€ํ™˜ํ•ด ๋ฐ˜ํ™˜ํ•œ๋‹ค.

<solution ํ•จ์ˆ˜>
๊ฒฐ๊ณผ ๊ฐ’์„ ๋‹ด์„ result ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์—ด s์—์„œ ๋ฌธ์ž ํ•˜๋‚˜์”ฉ find ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์•ŒํŒŒ๋ฒณ์„ ์–ป์–ด result ๋ณ€์ˆ˜์— ์ถ”๊ฐ€ํ•œ๋‹ค.

๋‹ค๋ฅธ ํ’€์ด

import Foundation

func solution(_ s:String, _ skip:String, _ index:Int) -> String {
    let arr = "abcdefghijklmnopqrstuvwxyz".map{String($0)}.filter {!skip.contains($0) }
    
    return s
    .map { 
        arr[arr.index(arr.firstIndex(of: String($0))!, offsetBy: index) % arr.count] 
    }
    .joined()
}
a๋ถ€ํ„ฐ z๊นŒ์ง€ ์•ŒํŒŒ๋ฒณ๋“ค ์ค‘์—์„œ skip์— ํฌํ•จ๋˜์ง€ ์•Š์€ ์•ŒํŒŒ๋ฒณ๋“ค๋งŒ arr ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค.
์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์—ด s์— map์„ ์‚ฌ์šฉํ•˜์—ฌ (arr์—์„œ s์˜ ๋ฌธ์ž์˜ ์ธ๋ฑ์Šค + index) % arr์˜ ํฌ๊ธฐ๋ฅผ ์ธ๋ฑ์Šค๋กœ ๊ฐ–๋Š” ์•ŒํŒŒ๋ฒณ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
(์ž…๋ ฅ๊ฐ’์ด ๋ณธ๋ฌธ๊ณผ ๊ฐ™์„ ๋•Œ,
arr์—์„œ a์˜ ์ธ๋ฑ์Šค๋Š” 0, 0+5 = 5, arr์˜ 5๋ฒˆ์งธ ์•ŒํŒŒ๋ฒณ์€ "h"์ด๊ธฐ ๋•Œ๋ฌธ์— "h"๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
์—ฐ์‚ฐ ๊ฐ’์ด arr์˜ ํฌ๊ธฐ๋ณด๋‹ค ์ปค์ง„ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•ด % arr.count๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.)
์•ŒํŒŒ๋ฒณ๋“ค์„ joined()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

๋ฐ˜์‘ํ˜•