[Kotlin]PS_10

Hood·2024년 8월 12일

매일PS

목록 보기
10/11
post-thumbnail

✍   Kotlin을 사용한 백준 알고리즘 문제풀이

매일 백준의 알고리즘 문제를 풀며 3문제씩 풀며
한 언어를 마스터 할 것을 목표로 이 글을 작성할 예정입니다.


🔎 2745번

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

첫 번째 문제는 내가 받은 n에 b진수로 변환하는 것인데
그럼 문자일 때는 숫자로 치환해 줘야하니 조건에 n[x]가 숫자면 -'0'을 해줘서 그 수 만큼 곱해지고
n[x]가 문자면 -'A'에 10을 더해준 만큼을 b에 곱해주도록 만들어 출력했다.

import java.util.Scanner

fun main() = with(Scanner(System.`in`)){
    val n = next()
    val b = nextInt()
    var result = 0

    for (x in n.indices){
        if (n[x] in '0'..'9'){
            result = result * b + (n[x] - '0')
        } else {
            result = result * b + (n[x] - 'A' + 10)
        }
    }
    print(result)
}

🔎 11005번

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

이번에는 반대로 해주는 것인데 그럼 계산도 n이 일단 0보다 작아지는 만큼 반복을 돌고
b를 나눠줘야 하는데 그것이 10보다 작으면 0~9 사이기에 + '0'.code를 만들어 그것을 char로 만들어주었다.
그리고 그게 문자라면 -10을 해준것에 'A'를 더해주어 문자를 만들어 준다.
그 다음 result에는 반대의 순서대로 문자가 들어왔기에 .reverse()를 통해 반대로 출력해준다.

import java.util.Scanner

fun main() = with(Scanner(System.`in`)) {
    var n = nextInt()
    val b = nextInt()
    val result = StringBuilder()

    while (n > 0) {
        if (n % b < 10) {
            result.append((n % b + '0'.code).toChar())
        } else {
            result.append((n % b - 10 + 'A'.code).toChar())
        }

        n /= b
    }

    print(result.reversed())
}

🔎 2720번

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

이 문제는 코인을 바꿔주는 문제로 간단하게 몇 번을 할 것인지 반복을 받고
intArray에 있는 코인을 n에 나누어주어 cnt 안에 넣어주면 된다.

fun main() {
    val sb = StringBuilder()
    val coin = intArrayOf(25, 10, 5, 1)

    repeat(readln().toInt()){
        var n = readln().toInt()
        val cnt = arrayOf(0, 0, 0, 0)

        for (i in coin.indices){
            cnt[i] = n / coin[i]
            n %= coin[i]
        }
        sb.append("${cnt[0]} ${cnt[1]} ${cnt[2]} ${cnt[3]}\n")
    }
    print(sb)
}

📌결론

코드의 활용을 하는 방법을 알아가는 것 같다.
최적화가 잘 되있는 코드를 만들도록 노력해야겠다.

profile
달을 향해 쏴라, 빗나가도 별이 될 테니 👊

0개의 댓글