본문 바로가기
카테고리 없음

[Lv.0] 숫자 찾기

by dantriss 2023. 3. 2.


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

정수 num을 String.valueOf(int i)를 이용하여 문자열로 만든다.

그 후 반복문을 사용해 문자열 0번째 부터 비교해서 정수 k가 있는지 비교할 예정이다.

문자열 0번째 부터 마지막까지 하나하나 문자 check에 넣고 정수 k와 일치하는지 확인한다.

잠깐 check는 문자고 k는 정수인데 어떻게 일치하는지 확인해?

check==k로 하니깐 전부 -1을 리턴하는데? 

정답은 아스키코드에 있다. 문자 0~9에 맞는 아스키코드도 있을테고 거기에서 문자0에 해당하는 걸 빼면 결국 숫자와 일치한다.

그럼 아스키코드를 다외워야해..?

외우면 좋겠지만, 간단한 것만 알아놔도 문제 없다고 본다. 예를 들면 a = 97 , A = 65 

다른건 계산해보면 되니깐

예를 들어 만약 문자 0 이 아스키코드 10이라고하면 그다음에 문자는 1이고 아스키코드는 11 , 문자 1에 해당하는 11에서 문자 0에 해당하는 10을 뺀다면 1이되다.

 

그래서 If조건식을 check에서 문자0을 뺀 값과 정수 k가 같으면 

answer에 i+1을 넣고 리턴해준다. 

temp의 길이만큼 반복문이 돌기 때문에 같은 문자가 있다면 계속 새로운 값으러 넘어가서 리턴하는 자리수값 i+1의 값이 달라지기 때문에 가장 처음 나타내는 자리를 리턴하라는 제한사항이 깨지게 되어 break;를 넣어 바로 반복문을 빠져나가게 했다.

일치하는 값이 없으면 -1을 리턴해주면 된다.

 

class Solution {
    public int solution(int num, int k) {
        int answer = 0;
        String temp = String.valueOf(num);
        
        for(int i = 0; i<temp.length(); i++){
            char check = temp.charAt(i);
            if((check-'0')==k){
                answer = (i+1);
                break;
            }else {
                answer = -1;
            }
            
        }
        
        return answer;
    }
}

 


 

그런데 문자 0에 해당하는 아스키코드는 무엇일까?

48이라고한다. 

 

그럼 -'0' 대신 48을 넣어줘도 정상작동할까?

 

 

아주 잘 작동이된다.

댓글