๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ฏ | ๋ฐฑ์ค€/๐Ÿ™‚ | Silver

[Kotlin, S5] ๋ฐฑ์ค€ 11068๋ฒˆ ํšŒ๋ฌธ์ธ ์ˆ˜

by immgga 2024. 8. 23.

์ถœ์ฒ˜: unsplash.com

 

ํšŒ๋ฌธ์ธ ์ˆ˜(11068๋ฒˆ)

Silver 5

#์ˆ˜ํ•™ #๋ธŒ๋ฃจํŠธํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜

https://www.acmicpc.net/problem/11068

 

๋ฌธ์ œ ๋‚ด์šฉ

 

 

๋ฌธ์ œ ์ ‘๊ทผ

10์ง„์ˆ˜์ธ ์ˆซ์ž๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ, 2์ง„๋ฒ•๋ถ€ํ„ฐ 64์ง„๋ฒ•๊นŒ์ง€ ์ˆ˜๋ฅผ ๋ณ€ํ™˜ํ•  ๋•Œ, ๋ณ€ํ™˜ํ•œ ์ˆ˜๊ฐ€ ํŒฐ๋ฆฐ๋“œ๋กฌ(ํšŒ๋ฌธ)์ด๋ฉด 1์„ ์ถœ๋ ฅ. ์•„๋‹ˆ๋ฉด 0์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

Kotlin์—์„œ ์ง„๋ฒ• ๋ณ€ํ™˜์„ ์‰ฝ๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ toString(N), toInt(N)์„ ์“ฐ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

ํ•˜์ง€๋งŒ toString, toInt๋กœ ๋‚ ๋จนํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค. ์™œ๋ƒํ•˜๋ฉด toString, toInt๋ฅผ ์“ฐ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Exception in thread "main" java.lang.IllegalArgumentException: radix 37 was not in valid range 2..36

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋กœ ๋ดค์„ ๋•Œ 36์ง„๋ฒ•๊นŒ์ง€ ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋œปํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๊ทผ๋ฐ ๋ฌธ์ œ์—์„œ๋Š” 64์ง„๋ฒ•๊นŒ์ง€ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ์ง์ ‘ ์ง„๋ฒ• ๋ณ€ํ™˜ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์ค˜์•ผ ํ•œ๋‹ค.

 

์ง„๋ฒ• ๋ณ€ํ™˜ ํ•จ์ˆ˜์˜ ์›๋ฆฌ๋Š” ์šฐ์„  ๋ณ€๊ฒฝํ•  ์ˆซ์ž์™€ ๋ช‡ ์ง„๋ฒ•์œผ๋กœ ๋ณ€ํ™˜์‹œํ‚ฌ์ง€ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์„ ๊ฒƒ์ด๋‹ค.

private fun converter(digits: Int, number: Int): String

number๋ฅผ digits๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•ด์„œ ๊ฒฐ๊ณผ๋ฅผ return ํ•  String์˜ ๋งจ ์•ž์— ๋„ฃ์–ด ์ค˜์•ผ ํ•œ๋‹ค.

23์„ 2์ง„์ˆ˜๋กœ ๋ณ€๊ฒฝํ•  ๋•Œ๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด ๋ณด๊ฒ ๋‹ค.

1. 23์„ 2์ง„์ˆ˜๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋‹ˆ๊นŒ 2๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•œ๋‹ค(remain). ๊ทธ๋Ÿฌ๋ฉด 1์ด ๋‚˜์˜จ๋‹ค(23 % 2 = 1).

2. 1์„ sb(StringBuilder)์˜ ๋งจ ์•ž์— ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค.

3. ๊ทธ๋ฆฌ๊ณ  number๋ฅผ digits๋กœ ๋‚˜๋ˆ ์„œ ๊ฐ’์„ ๊ฐฑ์‹ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด 11์ด ๋œ๋‹ค(23 / 2 = 11.5).

 

์œ„ 3๊ฐœ์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด ์ฃผ๋ฉด 1110์ด ๋‚˜์™€์„œ 2์ง„์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ 1๊ฐ€์ง€์˜ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค. 11์ง„๋ฒ•๋ถ€ํ„ฐ๋Š” 0๋ถ€ํ„ฐ 9๊นŒ์ง€๋กœ ํ‘œํ˜„ํ•  ์ˆ˜๊ฐ€ ์—†์–ด์„œ ๋ฌธ์ž๋ฅผ ์จ์•ผ ํ•œ๋‹ค.

๋ฌธ์ž๋ฅผ ์“ฐ๊ธฐ ์œ„ํ•ด remain๊ฐ’์ด 10 ์ด์ƒ์ธ์ง€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค. ๋‚˜๋จธ์ง€๊ฐ€ 10์ธ ๊ฒฝ์šฐ๋ถ€ํ„ฐ digits๊ฐ€ 11 ์ด์ƒ์ด๋ผ๋Š” ๋œป์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์•ŒํŒŒ๋ฒณ์—์„œ remain๋ฒˆ์งธ ์•ŒํŒŒ๋ฒณ ๊ฐ’์„ ๊ตฌํ•ด์„œ sb์— ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

while (num != 0) {
    val remain = num % digits

    if (remain > 9) sb.insert(0, (remain + 55).toChar())
    else sb.insert(0, remain)

    num /= digits
}

remain์— 55๋ฅผ ๋”ํ•ด์„œ ์•ŒํŒŒ๋ฒณ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๊ฒƒ์„ char๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ์•ŒํŒŒ๋ฒณ์ด ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

์ง„์ˆ˜ ๋ณ€ํ™˜์— ๋Œ€ํ•œ ๋” ์ž์„ธํ•œ ์„ค๋ช…์€ ์•„๋ž˜์˜ ํฌ์ŠคํŒ…์— ์ ํ˜€ ์žˆ๋‹ค. ๋‚˜๋„ ์ด ํฌ์ŠคํŒ…์„ ๋ณด๊ณ  ์›๋ฆฌ๋ฅผ ๊นจ์šฐ์ณค๋‹ค.

https://kumgo1d.tistory.com/entry/Kotlin-%EC%A7%84%EC%88%98-%EB%B3%80%ED%99%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98

 

[Kotlin] ์ง„์ˆ˜ ๋ณ€ํ™˜. ์•Œ๊ณ ๋ฆฌ์ฆ˜.

์•ˆ๋…•ํ•˜์„ธ์š” ๊ณจ๋“œ์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ์ฝ”ํ‹€๋ฆฐ์—์„œ ์ง„๋ฒ• ๋ณ€ํ™˜์— ๋Œ€ํ•ด์„œ ๊ธ€์„ ์“ฐ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 1. N์ง„์ˆ˜ -> 10์ง„์ˆ˜ 2์ง„์ˆ˜, 8์ง„์ˆ˜, 16์ง„์ˆ˜๋กœ ํ‘œํ˜„๋œ "1111"์„ 10์ง„์ˆ˜๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์ฝ”ํ‹€๋ฆฐ์€ ํ•จ์ˆ˜

kumgo1d.tistory.com

 

 

๋ฌธ์ œ ํ•ด๊ฒฐ ์ฝ”๋“œ

๋”๋ณด๊ธฐ
import java.io.BufferedReader
import java.io.InputStreamReader

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
    val case = readLine().toInt()

    for (c in 0 until case) {
        val number = readLine().toInt()
        var isPalindrome = 0

        for (f in 2 .. 64) {
            val formation = converter(f, number)

            if (formation.reversed() == formation) {
                isPalindrome = 1
                break
            }
        }

        println(isPalindrome)
    }
}

private fun converter(digits: Int, number: Int): String {
    var num = number
    val sb = StringBuilder()

    if (num == 0) return "0"

    while (num != 0) {
        val remain = num % digits

        if (remain > 9) sb.insert(0, (remain + 55).toChar())
        else sb.insert(0, remain)

        num /= digits
    }

    return sb.toString()
}

 

๋ฌธ์ œ ํ’€์ด

์ž…๋ ฅ๋ฐ›์€ ์ˆซ์ž๋ฅผ converter ํ•จ์ˆ˜๋กœ f์ง„๋ฒ•์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

๋ณ€ํ™˜ํ•œ f์ง„๋ฒ• ์ˆซ์ž๊ฐ€ ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณ€๊ฒฝํ•œ ๊ฐ’์ด ๋’ค์ง‘์€ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ์ด๋‹ค.

 

 

๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •

์ง„๋ฒ• ๋ณ€ํ™˜ ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ผ๋ถ€ ์–ธ์–ด์—์„œ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์•„๋„ ๋˜๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ.

kotlin์€ 36์ง„๋ฒ•๊นŒ์ง€๋ฐ–์— ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋“ฏํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๋ƒฅ ๋งŒ๋“ค์—ˆ๋‹ค.

๋งŒ๋“ค๊ณ  ๋ณด๋‹ˆ ๊ทธ๋ ‡๊ฒŒ ๋ณต์žกํ•œ ๋กœ์ง์€ ์•„๋‹ˆ์—ˆ๋‹ค.

728x90