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

 

 

 

๋ฌธ์ œ

 

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

 


 

์ ‘๊ทผ

 

  • s์˜ ๊ธธ์ด ๋‚˜๋ˆ„๊ธฐ 2๋ฅผ ๋‚ด๋ฆผํ•˜์—ฌ ๋ณ€์ˆ˜ x๋กœ ์ง€์ •ํ•˜๊ณ , ์ง์ˆ˜์ธ ๊ฒฝ์šฐ s[x-1], s[x] ์ถœ๋ ฅ / ํ™€์ˆ˜์ธ ๊ฒฝ์šฐ s[x] ์ถœ๋ ฅ
  • ์œ„์˜ ๋ฐฉ๋ฒ•์„ ๊ตฌ์ƒํ•˜๊ณ  ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ์œผ๋‚˜ ๋ฌธ๋ฒ•์— ๋งž์ง€ ์•Š์•„ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋‹ค.
๊ตฌ์ƒ, ์‹คํŒจํ•œ ์ฝ”๋“œ

import kotlin.math.*
class Solution {
    fun solution(s: String): String {
        val x = s.floor(s.length/2)
        return if(s.length % 2 == 0) s[x-1] //, s[x]
        else s[x]
    }
}
  • floor() ํ•จ์ˆ˜์˜ ์ž˜๋ชป๋œ ์‚ฌ์šฉ
    ์ฃผ์–ด์ง„ ์ฝ”๋“œ์—์„œ floor() ํ•จ์ˆ˜๋Š” ์ž˜๋ชป๋œ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค. floor() ํ•จ์ˆ˜๋Š” ์ฃผ์–ด์ง„ ์ˆซ์ž ์ดํ•˜์˜ ๊ฐ€์žฅ ํฐ ์ •์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด์ง€๋งŒ, ์—ฌ๊ธฐ์„œ๋Š” ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆˆ ๊ฐ’์„ ์†Œ์ˆ˜์  ์ดํ•˜๋กœ ๋ฒ„๋ฆฌ๋ ค๋Š” ์˜๋„๋กœ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค. ํ•˜์ง€๋งŒ Kotlin์˜ floor() ํ•จ์ˆ˜๋Š” ์‹ค์ˆ˜ํ˜•์„ ๋Œ€์ƒ์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • ๋ฐฐ์—ด ์š”์†Œ์— ๋Œ€ํ•œ ์ ‘๊ทผ
    s๋Š” ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ s[x-1] ๋˜๋Š” s[x]์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
  • ์ž˜๋ชป๋œ ๋ฐ˜ํ™˜ ํƒ€์ž…
    ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์€ String์œผ๋กœ ์„ ์–ธ๋˜์—ˆ์ง€๋งŒ, ์กฐ๊ฑด๋ฌธ์—์„œ๋Š” Char ๋˜๋Š” String์ด ์•„๋‹Œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์žˆ๋‹ค.

 


 

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

 

class Solution {
    fun solution(s: String): String {
        val x = s.length / 2        //์ •์ˆ˜ ๋‚˜๋ˆ„๊ธฐ ์ •์ˆ˜๋Š” ์ •์ˆ˜, s์˜ ๊ธธ์ด๋ฅผ 2๋กœ ๋‚˜๋ˆ”
        return if(s.length % 2 == 0) s.substring(x-1,x+1)  //์ง์ˆ˜: ์ธ๋ฑ์Šค x-1๋ถ€ํ„ฐ x+1 ๋ฏธ๋งŒ๊นŒ์ง€ ์ถœ๋ ฅ (x-1, x)
        else s[x].toString() //ํ™€์ˆ˜: ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ
    }
}

 


 

์„ค๋ช…

 

  1. val x = s.length / 2
    ์ฃผ์–ด์ง„ s์˜ ๊ธธ์ด๋ฅผ 2๋กœ ๋‚˜๋ˆ  x์— ์ €์žฅํ•œ๋‹ค. (์ •์ˆ˜ ๋‚˜๋ˆ„๊ธฐ ์ •์ˆ˜์ด๋ฏ€๋กœ ๋”ฐ๋กœ ์˜ฌ๋ฆผ์ด๋‚˜ ๋‚ด๋ฆผ์ฒ˜๋ฆฌ๋ฅผ ํ•  ๊ฒƒ์ด ์—†๋‹ค.)
  2. return if(s.length % 2 == 0) s.substring(x-1, x+1)
    s์˜ ๊ธธ์ด๊ฐ€ ์ง์ˆ˜์ธ ๊ฒฝ์šฐ s์˜ x-1๋ถ€ํ„ฐ x+1 ๋ฏธ๋งŒ๊นŒ์ง€ ๋ฆฌํ„ดํ•œ๋‹ค.
  3. else s[x].toString()
    s์˜ ๊ธธ์ด๊ฐ€ ํ™€์ˆ˜์ธ ๊ฒฝ์šฐ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

 

๐Ÿ’ก substring()

  • ๋ฌธ์ž์—ด์—์„œ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ์ถ”์ถœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ
  • substring(startIndex: Int): ์‹œ์ž‘ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ๋ฌธ์ž์—ด์˜ ๋๊นŒ์ง€์˜ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜
  • substring(startIndex: Int, endIndex: Int): ์‹œ์ž‘ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์ข…๋ฃŒ ์ธ๋ฑ์Šค ์ „๊นŒ์ง€์˜ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜
    ์ฐธ๊ณ ๋กœ ์‹œ์ž‘ ์ธ๋ฑ์Šค๋Š” ํฌํ•จ๋˜์ง€๋งŒ, ์ข…๋ฃŒ ์ธ๋ฑ์Šค๋Š” ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค. (๋ฏธ๋งŒ)
  • ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž์˜ ์ธ๋ฑ์Šค๋Š” 0

 


 

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

 

class Solution {
  fun solution(s: String) =
    with(s) { substring(length / 2 - 1 + (length % 2) .. length / 2) }
}
  • with(s)
    with()์€ Kotlin ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ํ™•์žฅ ํ•จ์ˆ˜ ์ค‘ ํ•˜๋‚˜๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ์ˆ˜์‹  ๊ฐ์ฒด๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ˆ˜์‹  ๊ฐ์ฒด์˜ ๋ฒ”์œ„ ๋‚ด์—์„œ ์ฝ”๋“œ ๋ธ”๋ก์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด, with ํ•จ์ˆ˜๋Š” ํŠน์ • ๊ฐ์ฒด์— ๋Œ€ํ•ด ์ˆ˜ํ–‰๋˜๋Š” ์ž‘์—…์„ ๋ธ”๋ก ์•ˆ์—์„œ ์งง๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. with(s)๋Š” ๋ฌธ์ž์—ด s๋ฅผ ์ˆ˜์‹  ๊ฐ์ฒด๋กœ ์‚ฌ์šฉํ•˜๊ณ , ์ค‘๊ด„ํ˜ธ {} ๋ธ”๋ก ๋‚ด์—์„œ s์— ๋Œ€ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฉํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • length / 2
    ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ 2๋กœ ๋‚˜๋ˆˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฌธ์ž์—ด์˜ ์ค‘์•™ ์œ„์น˜๊ฐ€ ๋œ๋‹ค.
  • - 1 + (length % 2)
    ๋งŒ์•ฝ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ํ™€์ˆ˜์ธ ๊ฒฝ์šฐ, ์ค‘์•™์— ์žˆ๋Š” ๋ฌธ์ž์˜ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด 1์„ ๋นผ์ค€๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฌธ์ž์—ด์˜ ์ค‘์•™ ์œ„์น˜๊ฐ€ ๋œ๋‹ค. (์ง์ˆ˜์™€ ํ™€์ˆ˜ ๋ชจ๋‘ ์ฒ˜๋ฆฌ)
  • .. length / 2
    ๋ฌธ์ž์—ด์˜ ์ค‘์•™์— ์œ„์น˜ํ•œ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ๋ฌธ์ž์—ด์˜ ๋๊นŒ์ง€์˜ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•œ๋‹ค.
  • ์ด ๋ชจ๋“  ๋ฒ”์œ„๋ฅผ ์‚ฌ์šฉํ•œ substring() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ค‘์•™์— ์žˆ๋Š” ๋ฌธ์ž๋‚˜ ๋ฌธ์ž์—ด์„ ์ถ”์ถœํ•œ๋‹ค.

 

class Solution {
    fun solution(s: String) = s.slice(((s.length - 1) / 2)..(s.length / 2))
}
  • slice()๋ฅผ ์ด์šฉํ•œ ํ’€์ด๋‹ค.
  • (s.length - 1) / 2
    ๋ฌธ์ž์—ด์˜ ๊ธธ์ด์—์„œ 1์„ ๋บ€ ํ›„ 2๋กœ ๋‚˜๋ˆˆ๋‹ค.
    ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ํ™€์ˆ˜์ธ ๊ฒฝ์šฐ ์ค‘์•™๊ฐ’์ด๋ฉฐ, ์ง์ˆ˜์ธ ๊ฒฝ์šฐ ๋ฌธ์ž์—ด์˜ ์ค‘์•™ ์œ„์น˜ ์ค‘ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž์˜ ์ธ๋ฑ์Šค๊ฐ€ ๋œ๋‹ค.
  • s.length / 2
    ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ 2๋กœ ๋‚˜๋ˆˆ๋‹ค.
    ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ํ™€์ˆ˜์ธ ๊ฒฝ์šฐ ์ค‘์•™๊ฐ’์ด๋ฉฐ, ์ง์ˆ˜์ธ ๊ฒฝ์šฐ ๋ฌธ์ž์—ด์˜ ์ค‘์•™ ์œ„์น˜ ์ค‘ ๋‘ ๋ฒˆ์งธ ๋ฌธ์ž์˜ ์ธ๋ฑ์Šค๊ฐ€ ๋œ๋‹ค.
  • s.slice(...)
    ๋ฌธ์ž์—ด์˜ ํŠน์ • ๋ฒ”์œ„์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ์ถ”์ถœํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

 

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