[프로그래머스] 숫자 찾기 문제 풀이(Java)

이하영·2023년 5월 25일
0

코딩테스트

목록 보기
16/21
post-thumbnail

✔ 문제 설명

정수 numk가 매개변수로 주어질 때, num을 이루는 숫자 중에 k가 있으면 num의 그 숫자가 있는 자리 수를 return하고 없으면 -1을 return 하도록 solution 함수를 완성해보세요.


✔ 제한사항

  1. 0 < num < 1,000,000
  2. 0 ≤ k < 10
  3. numk가 여러 개 있으면 가장 처음 나타나는 자리를 return 합니다.

💬 내 풀이

class Solution {
    public int solution(int num, int k) {
        int answer = 0;
        
        String num_s=Integer.toString(num);
        
        char[] num_arr=num_s.toCharArray();
        for(int i=0; i<num_arr.length; i++){
            if(num_arr[i]==Character.forDigit(k,10)){
                answer=i+1;
                break;
            }else{
                answer=-1;
            }
        }
        
        return answer;
    }
}

처음에는 정수(int) 타입의 k를
문자(char) 타입으로 변환해야 하는데
char k_s=(char) k;로 형변환을 시도했다.

하지만 이렇게 형변환을 하면 아스키 코드 값에 해당하는
문자가 출력되어 잘못된 결과가 나온다.

* 이럴 경우 '0'의 아스키 코드 값인 48을 더하거나,
'0'을 더하면 원하는 결과를 얻을 수 있었다.

class Solution {
    public int solution(int num, int k) {
        int answer = 0;
        
        String num_s=Integer.toString(num);
        char k_s=(char)(k+'0');
        
        char[] num_arr=num_s.toCharArray();
        for(int i=0; i<num_arr.length; i++){
            if(num_arr[i]==k_s){
                answer=i+1;
                break;
            }else{
                answer=-1;
            }
        }
        
        return answer;
    }
}

하지만 (Char)로 형변환을 할 경우, 10+'0'의 값은 : 이고,
10 이상의 값은 표현할 수 없다.

그래서 찾아보니 int형을 char형으로 변환하는
java.lang 패키지의 Character 클래스의
메소드 forDigit()을 사용하면 효율적이게 변환할 수 있었다.


⭐ Character.forDigit()

Character.forDigit(int digit, int radix)
특정 숫자를 해당하는 진법으로 변환함
int형을 char형으로 변환하는 메소드

digit 부분에는 변환할 정수를 입력하고,
radix 부분에는 몇 진법으로 변환할지 입력하면 된다.

예시

Character.forDigit(k,10)
profile
안녕하세요, 웹 개발자 이하영입니다!

0개의 댓글