ํ๋ก๊ทธ๋๋จธ์ค 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()๋ฅผ ์ฌ์ฉํ์ฌ ํ๋์ ๋ฌธ์์ด๋ก ๋ฐํํ๋ค.
'โจ๏ธ Language > swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ๋ฐฑ์ค 10828๋ฒ - ์คํ (0) | 2023.03.18 |
---|---|
[Swift] ํ๋ก๊ทธ๋๋จธ์ค LV.1 ์นด๋ ๋ญ์น (0) | 2023.03.18 |
[Swift] ํ๋ก๊ทธ๋๋จธ์ค LV.1 ๊ฐ์ธ์ ๋ณด ์์ง ์ ํจ๊ธฐ๊ฐ (0) | 2023.03.17 |
[Swift] ํ๋ก๊ทธ๋๋จธ์ค LV.1 ํฌ๊ธฐ๊ฐ ์์ ๋ถ๋ถ๋ฌธ์์ด (0) | 2023.03.17 |
[Swift] ํ๋ก๊ทธ๋๋จธ์ค LV.1 ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ์ ๊ธ์ (0) | 2023.03.16 |