본문 바로가기
하루하루/프로그래머스 문제풀이

[Lv.0 - Java] 120904. 숫자 찾기

by 키튼햄 2023. 12. 15.

 

문제

https://school.programmers.co.kr/learn/courses/30/lessons/120904

 

 

 

 

풀이

1. num을 String 타입으로 바꾼다.

2. String 타입인 num2를 .toCharArray()를 이용해 각각의 문자로 나누어 char[] 배열에 저장한다.

3. for문을 이용해 n1[i]의 숫자가 k인지 확인한다.

이 과정에서 nu[i]는 char 타입이므로 int 타입인 k와 같지 않다. 따라서 n1[i]의 타입을 Character.getNumericValue()를 사용해 int 타입으로 변환해 주어야한다.

4. 같다면 i+1 의 값을 반환해준다. (왜냐하면 java에서 배열의 순서는 0부터 시작하기 때문에 문제에서 나온 것과 같이 첫번째 인덱스의 값이 1이라고 해야한다면  java 배열 인덱스+1의 숫자가 맞기 때문이다.)

5. 없다면 -1을 반환한다.

 

 

 

코드

class Solution {
    public int solution(int num, int k) {
        String num2 = num+"";
        char[] n1 = num2.toCharArray();
        for(int i=0; i<n1.length; i++){
            if(Character.getNumericValue(n1[i]) == k){
                return i+1;
            }
        }
        return -1;
    }
}

 

 

 

++

다른사람 풀이 추가. 

다른사람이 푼 풀이가 너무 간단해서 풀이방식을 들고왔다.

class Solution {
    public int solution(int num, int k) {
        return ("-" + num).indexOf(String.valueOf(k));
    }
}

 

풀이)

 

("-" + num)  => num 앞에 "-" 를 추가함으로써 int 타입인 num을 String 타입으로 만들고, 숫자앞에 -를 하나 넣음으로써 배열에 넣었을때 숫자가 인덱스 1부터 시작하도록 만든것이다.

"-" 문자가 인덱스의 0을 차지하기 때문이다.

 

.indexOf(String.valueOf(k))  => String.valueOf(k)는 k를 문자열로 반환한다. 그리고 .indexOf()를 사용하여 k의 인덱스를 찾는 것이다.

 

.indexOf() 메소드는 반환할 값이 없으면 -1을 무조건 반환하여 해당 항목에 없음을 나타낸다.

반환할 값이 발견되면 문자열에서 지정된 값이 처음으로 나타나는 인덱스를 반환한다.

 

예를 들어서 num의 숫자가 123이고, k가 1이라면

("-" + num)에 의해 `-123` 이라는 문자열이 되고, .indexOf(String.valueOf(k)) 에 의해 1의 인덱스에 해당하는 `1`이 반환된다. 반환할 값이 없으면 -1을 반환한다.