알고리듬 문제를 풀다 발견한 kotlin의 toChar()과 digitToChar()의 차이

서정한·2023년 8월 2일
0

내일배움캠프 7기

목록 보기
16/66

Intro

  • 오늘 아침에도 어김없이 알고리듬 문제를 풀고있었다. 문제는 int 타입의 숫자를 주었을때 그 안에 0~9중 내가 원하는 숫자가 있는지 없는지를 찾아 있다면 해당 자리의 index를 return해주는 그런문제이다. 예를들면 12345 라는 숫자가 주어지고 여기에서 3을 찾는다고하면 3번째 자리에있으므로 3을 return해주는 식이다.
    숫자찾기문제
  • 문제를보고 int -> string으로 바꿔서 찾아주면 되겠다는 판단이 섰고 그렇게 문제를 푸는데 안풀렸다...

문제상황

  • String은 Array이므로 [] 접근이 가능하고, String의 element들은 Char 타입이니 int 타입을 toChar해줘서 비교하면 답이 나오겠지 했는데.. 안나온다!!
class Solution {
    fun solution(num: Int, k: Int): Int {
        var answer: Int = -1
        val num_str = num.toString()
        for(i in num_str.indices) {
            if(num_str[i] == k.toChar()) {
                answer = i+1
                return answer
            } 
        }

        return answer
    }
}

분석

  • kotlin에서는 Char형으로 바꾸는 확장함수를 2가지 제공하는데 하나가 toChar()이고 또하나가 digitToChar()이다. 문제상황이 발생한 이유는 이 둘의 차이를 모르고 그냥썼기 때문이었다.
  • Int형에서 .toChar()을 사용하면 ASCII코드의 문자로 변환한다. 만약 64.toChar()을 하게되면 a가 나오는 식이다. 반면 digitToChar()은 해당 Int 타입의 0~9까지의 숫자 자체를 Char 타입으로 반환해준다.
  • 위에서 k가 1이라고했을때 toChar()을 해주게되면 공백이 나오기때문에 내가 원하는 시나리오대로 실행되지않았던것이다.

해결

  • digitToChar()을 사용해서 해결했다.

Outro

  • 이번일을 계기로 해당 확장함수를 사용할때 아무생각없이 toChar()을 쓰는일은 없을듯싶다. 덕분에 digitToChar에 대해 알아볼 수 있었다.
profile
잘부탁드립니다!

0개의 댓글