๋ฌธ์ ์ค๋ช
์ด๋ค ๋ฌธ์ฅ์ ๊ฐ ์ํ๋ฒณ์ ์ผ์ ํ ๊ฑฐ๋ฆฌ๋งํผ ๋ฐ์ด์ ๋ค๋ฅธ ์ํ๋ฒณ์ผ๋ก ๋ฐ๊พธ๋ ์ํธํ ๋ฐฉ์์ ์์ ์ํธ๋ผ๊ณ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด "AB"๋ 1๋งํผ ๋ฐ๋ฉด "BC"๊ฐ ๋๊ณ , 3๋งํผ ๋ฐ๋ฉด "DE"๊ฐ ๋ฉ๋๋ค. "z"๋ 1๋งํผ ๋ฐ๋ฉด "a"๊ฐ ๋ฉ๋๋ค. ๋ฌธ์์ด s์ ๊ฑฐ๋ฆฌ n์ ์ ๋ ฅ๋ฐ์ s๋ฅผ n๋งํผ ๋ฏผ ์ํธ๋ฌธ์ ๋ง๋๋ ํจ์, solution์ ์์ฑํด ๋ณด์ธ์.
์ ํ ์กฐ๊ฑด
- ๊ณต๋ฐฑ์ ์๋ฌด๋ฆฌ ๋ฐ์ด๋ ๊ณต๋ฐฑ์ ๋๋ค.
- s๋ ์ํ๋ฒณ ์๋ฌธ์, ๋๋ฌธ์, ๊ณต๋ฐฑ์ผ๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- s์ ๊ธธ์ด๋ 8000์ดํ์ ๋๋ค.
- n์ 1 ์ด์, 25์ดํ์ธ ์์ฐ์์ ๋๋ค.
์ ์ถ๋ ฅ ์
s | n | result |
"AB" | 1 | "BC" |
"z" | 1 | "a" |
"a B z" | 4 | "e F d" |
๋ด ๋ฌธ์ ํ์ด
func solution(_ s:String, _ n:Int) -> String {
let upperString = Array("abcdefghijklmnopqrstuvwxyz".uppercased())
let lowerString = Array("abcdefghijklmnopqrstuvwxyz")
let inputString = Array(s)
var result = ""
for i in inputString {
// ์ฃผ์ด์ง ๋ฌธ์์ด์ i๋ฒ์งธ ๋ฌธ์๊ฐ ๋๋ฌธ์ ๋ฐฐ์ด์ ํฌํจ๋์์ ๊ฒฝ์ฐ
if upperString.contains(i) {
// ๋๋ฌธ์ ๋ฐฐ์ด์์ ํด๋น ๋ฌธ์์ ์์น๋ฅผ ์ฐพ๊ณ , ๊ทธ ์์น์ n์ ๋ํ ๊ฐ์ ์ ์ฅ
var indexNum = upperString.firstIndex(of: i)! + n
// ์ ์ฅ๋ ์์น๊ฐ 25๋ณด๋ค ํด ๊ฒฝ์ฐ, 26์ ๋นผ์ค์ผ๋ก์จ ๋ค์ ์ฒ์๋ถํฐ ์์น๋ฅผ ์ฐพ์ ์ ์๋๋ก
if indexNum > 25 {
indexNum = indexNum - 26
}
// ๋๋ฌธ์ ๋ฐฐ์ด์์ ์ฐพ์ ์์น์ ๋ฌธ์๋ฅผ result ๋ฐฐ์ด์ ์ถ๊ฐ
result.append(upperString[indexNum])
}
// ์ฃผ์ด์ง ๋ฌธ์์ด์ i๋ฒ์งธ ๋ฌธ์๊ฐ ์๋ฌธ์ ๋ฐฐ์ด์ ํฌํจ๋์์ ๊ฒฝ์ฐ
else if lowerString.contains(i) {
var indexNum = lowerString.firstIndex(of: i)! + n
if indexNum > 25 {
indexNum = indexNum - 26
}
result.append(lowerString[indexNum])
}
// ์ฃผ์ด์ง ๋ฌธ์์ด์ i๋ฒ์งธ ๋ฌธ์๊ฐ ๊ณต๋ฐฑ์ผ ๊ฒฝ์ฐ
else {
result.append(i)
}
}
return result
}
- ์๋ฌธ์, ๋๋ฌธ์ ๋ฐฐ์ด์ ๊ฐ๊ฐ ์์ฑํด์ฃผ์๋ค.
- ์ฃผ์ด์ง ๋ฐฐ์ด์ i ๋ฒ์งธ ๋ฌธ์๊ฐ ๋๋ฌธ์์ธ์ง ์๋ฌธ์์ธ์ง ํ๋ณํ๊ณ ์์ฑํ ์๋ฌธ์ ๋๋ฌธ์ ๋ฐฐ์ด์์ ์์น๋ฅผ ์ฐพ์๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ฐพ์ ์์น์ n์ ๋ํด์ฃผ์ด ์๋ก์ด ์์น์ ๋ฌธ์๋ฅผ result์ ์ถ๊ฐํด์ฃผ์๋๋ฐ,
๋ง์ฝ ๋ํ ๊ฐ์ด ์ํ๋ฒณ ๊ฐ์์ธ 26๊ฐ๋ฅผ ๋์ผ๋ฉด ๋ค์ ์ฒ์๋ถํฐ ์์น๋ฅผ ์ฐพ์์ฃผ๊ธฐ ์ํด 26์ ๋นผ์ฃผ์๋ค. - ๊ณต๋ฐฑ์ผ ๊ฒฝ์ฐ์๋ ๊ทธ๋๋ก ๊ณต๋ฐฑ์ ์ถ๊ฐํด์ฃผ์๋ค.
์ธ์์ ์ธ ํ์ด
func solution(_ s:String, _ n:Int) -> String {
return s.utf8.map {
var code = Int($0)
switch code {
case 65...90:
code = (code + n - 65) % 26 + 65
case 97...122:
code = (code + n - 97) % 26 + 97
default:
break
}
return String(UnicodeScalar(code)!)
}.joined()
}
- ์ ๋์ฝ๋๋ฅผ ์ด์ฉํ์ฌ ๊ณ์ฐํด์ฃผ์๋ค.
๐ก ํผ๋๋ฐฑ
- ์ ๋์ฝ๋๋ฅผ ์ด์ฉํ ์ฝ๋ฉ ๋ฐฉ๋ฒ๋ ๊ณต๋ถํด๋ด์ผํ ๊ฒ ๊ฐ๋ค.
- ๋ด๊ฐ ํผ ํ์ด๋ ๋ด๊ฐ ๋ด๋ ์ข ๋ณต์กํด์ใ
๋ ๊ฐ๊ฒฐํ ํ์ด๋ณด๋ ์ฐ์ต์ ํด์ผ๊ฒ ๋ค.
๐ [ ์ถ๊ฐ ] 1์ฃผ์ผ ํ ๋ค์ ํ์ด๋ณด๊ธฐ
func solution(_ s:String, _ n:Int) -> String {
var result = ""
let strLower = Array("abcdefghijklmnopqrstuvwxyz")
let strUpper = Array("abcdefghijklmnopqrstuvwxyz".uppercased())
for i in s {
if i == " " { result.append(" ") }
else {
if strLower.contains(i) {
result.append(String(strLower[(strLower.firstIndex(of: i)! + n) % 26])) }
else {
result.append(String(strUpper[(strUpper.firstIndex(of: i)! + n) % 26])) }
}
}
return result
}
- ์๋ฌธ์, ๋๋ฌธ์ ๋ฐฐ์ด์ ์์ฑํด์ฃผ์๋ค.
- ๊ณต๋ฐฑ์ด๋ผ๋ฉด ๊ณต๋ฐฑ์ ์ถ๊ฐํด์ฃผ๊ณ , ์๋ฌธ์ ํน์ ๋๋ฌธ์์ผ ๊ฒฝ์ฐ ์์ฑํ ์๋ฌธ์ ๋๋ฌธ์ ๋ฐฐ์ด์์ ์์น๋ฅผ ์ฐพ์์ฃผ์๋ค.
- ๋๋จธ์ง ์ฐ์ฐ์ ์ฌ์ฉํ์ฌ ๊ตณ์ด ๋ฐฐ์ด์ ์ด๊ณผํ ๋๋ฅผ ๋ฐ์ง์ง ์๊ณ , ๋ฐ๋ก ์์น๋ฅผ ์ฐพ์ ์ ์๊ฒ ํ๋ค.
- ๋๋จธ์ง ์ฐ์ฐ์ ์ด์ฉํ๋ ์ฒซ ๋ฒ์งธ ํ์ด์ ๋นํด ํจ์ฌ ํจ์จ์ ์ผ๋ก ์ฝ๋๊ฐ ์์ฑ๋๊ณ ,
์ ์ฒด ์ฝ๋๋ ๊ฐ๊ฒฐํ๊ฒ ์ ์์ฑ๋ ๊ฒ ๊ฐ๋ค.
๋ฌธ์
'3๏ธโฃ Swift > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift Algorithm] ์๋ฐ์๋ฐ์๋ฐ์๋ฐ์๋ฐ์? Programmers(Lv.1) (0) | 2021.06.14 |
---|---|
[Swift Algorithm] ๋ฌธ์์ด์ ์ ์๋ก ๋ฐ๊พธ๊ธฐ Programmers(Lv.1) (0) | 2021.06.14 |
[Swift Algorithm] ์ฝ์์ ํฉ Programmers(Lv.1) (0) | 2021.06.14 |
[Swift Algorithm] ์ด์ํ ๋ฌธ์ ๋ง๋ค๊ธฐ Programmers(Lv.1) (0) | 2021.06.14 |
[Swift Algorithm] ์๋ฆฟ์ ๋ํ๊ธฐ Programmers(Lv.1) (0) | 2021.06.14 |
๋๊ธ