" Park 기술 블로그 "
# 카테고리
# 도구
[Kotlin] Char to Int
2021-10-06 15:32:21

알고리즘 문제를 풀다가 오랜만에 Char 타입을 Int 타입으로 변환해서 푸는 문제를 만났다.

이 문제는 대략 48% 오답률을 갖고 있어서 비교적 쉽게 알고리즘을 구상할 수 있었다. 그런데 왠걸, 예상하지 못한 이슈를 만났다.

( 사실 저번에도 만났던 이슈였는데 오랜만에 Char를 Int로 변환해야하는 알고리즘 문제를 만나서 까먹었었다. )

 

Char를 Int 타입으로 변환할 때 c.toInt() 와 같이 사용했는데 기대한 동작을 하지 않았다 이렇게 하니 Char는 ASCII 코드 값으로 반환하고 있었기 때문이다. 그래서 이 문제를 해결하기 위해서는 크게 두 가지의 방법이 있었다.

  1. Character.getNumericValue(Char)를 사용하는 방법
  2. Char - '0'을 사용하는 방법

 

1번의 방법은 0~9까지 Char 타입을 Int 타입으로 변경해주고 A~Z의 Char 타입을 입력하면 대소문자 구분 없이 10~35까지의 숫자로 변환해준다. 그리고 0~9, A~Z의 값 외의 Char 타입을 넣게 되면 -1을 리턴한다.

2번의 방법은 간단하다. Char 타입의 0~9의 ASCII 코드 값에서 '0' ASCII 코드 값을 빼므로 숫자를 구하는 간단한 방식이다. 예를 들어, '0'의 ASCII 코드 값이 48이고 '1'의 ASCII 코드값이 49이다. 그러면 '1' - '0' = 1의 정수값으로 사용할 수 있는 것이다.

 

위의 두 방법 말고도 c.toString().toInt() 이렇게 하는 방법도 있는데 Char -> String -> Int 이렇게 형변환을 거쳐야 하니 끌리지 않는 방법이었다.

 

아래는 이 형변환을 활용해서 풀었던 알고리즘 문제다. 이 문제는 백준 알고리즘의 2231번 분해합 문제다.

import java.util.*
 
fun main() = with(Scanner(System.`in`)) {
    val n = next()
    val num = n.toInt()
 
    for (g in (num - (n.length * 9)) until num) {
        var sum = g
        g.toString().forEach { sum += it - '0' }
 
        if (sum == num) {
            print(g)
            return
        }
    }
    print(0)
}
2
# 댓글 + 새 댓글 작성
# 새 댓글 작성
댓글 암호는 댓글 삭제 시 필요합니다.
# 님에게 답변 작성
대댓글 암호는 댓글 삭제 시 필요합니다.
# 님의 댓글 삭제
댓글 작성 시 입력했던 암호를 입력해주세요.
ㅋㅋ 2021-10-13 17:45:09
어렵네염 잘보고갑니당
2021-12-14 23:55:54   ParkSM
감사합니다 : )