[Kotlin] ์‹œ์ € ์•”ํ˜ธ (ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜)
๋ฐ˜์‘ํ˜•

 

 

 

 

๋ฌธ์ œ

https://school.programmers.co.kr/learn/courses/30/lessons/12926

 

 

 

 


 

์ ‘๊ทผ

 

  • ์•„์Šคํ‚ค ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ํ’€๋ฉด ๋˜์ง€ ์•Š์„๊นŒ? ์ƒ๊ฐํ•˜๋ฉฐ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌ์ƒํ–ˆ๋‹ค.
๋Œ€์ถฉ ๊ตฌ์ƒํ•œ ์ฝ”๋“œ 
class Solution {
    fun solution(s: String, n: Int): String {
        val temp = s.split("")
        var answer = temp.map { it.toInt() + n }
        return answer.toString()
    }
}
  • ์œ„ ์ฝ”๋“œ๋Š” java.lang.NumberFormatException: For input string: "" ์˜ค๋ฅ˜๊ฐ€ ๋œจ๋ฉฐ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • NumberFormatException์ด ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋Š” s.split("")๋ฅผ ํ†ตํ•ด ๋ฌธ์ž์—ด์„ ๋นˆ ๋ฌธ์ž์—ด("")์„ ๊ธฐ์ค€์œผ๋กœ ๋ถ„ํ• ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฌธ์ž์—ด์ด "abc"๋ผ๋ฉด s.split("")๋Š” ["", "a", "b", "c", ""]์™€ ๊ฐ™์ด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋นˆ ๋ฌธ์ž์—ด์ด ํฌํ•จ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, toInt() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋นˆ ๋ฌธ์ž์—ด("")๋กœ ์ธํ•ด NumberFormatException์ด ๋ฐœ์ƒํ•œ๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋ฌธ์ž์—ด์„ ๋ถ„ํ• ํ•  ๋•Œ ๋นˆ ๋ฌธ์ž์—ด์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜์ง€ ์•Š๊ณ , ๊ฐ ๋ฌธ์ž๋ฅผ ๋ถ„ํ• ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
    ๋ฌธ์ž์—ด์„ ๊ฐ ๋ฌธ์ž ๋‹จ์œ„๋กœ ๋ถ„ํ• ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” toCharArray() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

class Solution {
    fun solution(s: String, n: Int): String {
        val answer = s.toCharArray().map { (it.toInt() + n).toChar() }.joinToString("")
        return answer
    }
}
  • ๊ทธ๋ž˜์„œ ์ด๋Ÿฐ์‹์œผ๋กœ ์ˆ˜์ •ํ•˜์˜€๋Š”๋ฐ, ์ด๋ฒˆ์—” ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๊ฐ€ ๋ฌธ์ œ์˜€๋‹ค. 
    ์˜ค์ง "AB" "1" -> "BC" ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋งŒ ๋™์ž‘ํ•˜๊ณ , z์—์„œ a๋กœ ๊ฐ€๊ฑฐ๋‚˜ ๋„์–ด์“ฐ๊ธฐ๋ฅผ ๋ฐ˜์˜ํ•˜์ง€๋Š” ๋ชปํ–ˆ๋‹ค.

 

 

 


 

์„ฑ๊ณต ์ฝ”๋“œ

 

class Solution {
    fun solution(s: String, n: Int): String {
        return s.toCharArray().map{
            when(it){
                in 'A'..'Z' -> {
                    if(it + n > 'Z') it + n - 26 else it + n
                }in 'a'..'z' -> {
                    if(it + n > 'z') it + n - 26 else it + n
                }else -> {
                    it
                }
            }
        }.joinToString("")
    }
}

 

 

 


 

์„ค๋ช…

 

  1. ์‹œ์ € ์•”ํ˜ธ์—์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋‚ด๊ฐ€ ์ฒ˜์Œ ๊ตฌ์ƒํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋‹จ์ˆœํžˆ ์•„์Šคํ‚ค ์ฝ”๋“œ๊ฐ’์—์„œ n๊ฐ’(๊ฑฐ๋ฆฌ)๋ฅผ ๋”ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๊ตฌ์„ฑํ•˜๋ฉด ์•ŒํŒŒ๋ฒณ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์„œ ์ด์ƒํ•œ ๊ฐ’์ด ์ถœ๋ ฅ๋  ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ 26์„ ์ด์šฉํ•ด์„œ ์•ŒํŒŒ๋ฒณ์„ ๋ฒ—์–ด๋‚  ์ˆ˜ ์—†๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.
  2. string์ด์—ˆ๋˜ s๋ฅผ char์š”์†Œ์˜ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค๊ณ , ๊ฐ๊ฐ์˜ ์š”์†Œ๋ฅผ map์œผ๋กœ ์ฒ˜๋ฆฌํ•œ ๋’ค joinToString("")์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  3. A..Z ๋Œ€๋ฌธ์ž์—์„œ ๋Œ€๋ฌธ์ž๋ฅผ ๋„˜์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ ๋”ํ•œ ๊ฐ’์—์„œ 26์„ ๋นผ์ค€๋‹ค.
    a..z ์†Œ๋ฌธ์ž์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์†Œ๋ฌธ์ž๋ฅผ ๋„˜์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ ๋”ํ•œ ๊ฐ’์—์„œ 26์„ ๋นผ์ค€๋‹ค.
    ๊ณต๋ฐฑ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด else๋Š” it์„ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 
  4. -26์„ ํ•˜๋Š” ์ด์œ ๋Š” ์•ŒํŒŒ๋ฒณ์˜ ์ˆœํ™˜์„ฑ ๋•Œ๋ฌธ์ด๋‹ค.
    ์•ŒํŒŒ๋ฒณ์€ ์ˆœํ™˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ 'Z' ๋‹ค์Œ์—๋Š” ๋‹ค์‹œ 'A'๊ฐ€ ์˜จ๋‹ค. ๋”ฐ๋ผ์„œ ์•ŒํŒŒ๋ฒณ์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ n๋งŒํผ ์ด๋™์‹œํ‚ฌ ๋•Œ, 'Z'๋ฅผ ๋„˜์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ ๋‹ค์‹œ 'A'๋กœ ๋Œ์•„์™€์•ผ ํ•œ๋‹ค. 'Z'์˜ ASCII ๊ฐ’์€ 90์ด๊ณ , 'A'์˜ ASCII ๊ฐ’์€ 65์ด๋‹ค. ๋”ฐ๋ผ์„œ 'Z'์— 1์„ ๋”ํ•˜๋ฉด 91์ด ๋˜๋Š”๋ฐ, ๋‹ค์‹œ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ ค๋ฉด -26์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
    ๋”ฐ๋ผ์„œ 'Z'์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ 1๋งŒํผ ์ด๋™ํ•œ ๊ฒฐ๊ณผ๋Š” 90 + 1 - 26 = 65๊ฐ€ ๋œ๋‹ค.

 

 

 


 

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•

 

class Solution {
    fun solution(s: String, n: Int): String =
        s.toList().joinToString(separator = "") {
            when (it) {
                in 'A'..'Z' -> ('A'.toInt() + (it.toInt() - 'A'.toInt() + n) % ('Z' - 'A' + 1)).toChar()
                in 'a'..'z' -> ('a'.toInt() + (it.toInt() - 'a'.toInt() + n) % ('z' - 'a' + 1)).toChar()
                else -> it
            }.toString()
        }
}
  • A์™€ Z์˜ ์•„์Šคํ‚ค์ฝ”๋“œ์ฐจ๊ฐ€ 26์ธ์ง€ ์•Œ์ง€ ๋ชปํ•ด๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

class Solution {
    fun solution(s: String, n: Int): String =
        s.map {
            when {
                it.isLowerCase() -> 'a' + (it + n - 'a') % 26
                it.isUpperCase() -> 'A' + (it + n - 'A') % 26
                else -> ' '
            }
        }.joinToString("")
}
  • 'a'..'z' ์™€ ๊ฐ™์ด ํ‘œ๊ธฐํ•˜์ง€ ์•Š๊ณ , isLowerCase()์™€ isUpperCase()๋ฅผ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

 

 

 

 

๋ฐ˜์‘ํ˜•
 ๐Ÿ’ฌ C O M M E N T