본문 바로가기

코딩테스트 스터디

코딩테스트 연습 - 숫자 찾기 (JAVA)

프로그래머스 코딩테스트 입문 0단계 문제입니다

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

 

📢 문제 설명

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

 

⭕ 정답 코드

1. 삼항 연산자 사용

class Solution {
    public int solution(int num, int k) {
        int answer = 0;
        String strnum = Integer.toString(num);
        String strk = Integer.toString(k);
        
        answer = strnum.indexOf(strk);
        return answer==-1 ? answer : answer+1;
    }
}

 

2. 기호를 하나 추가하여 index 1부터 카운트

class Solution {
    public int solution(int num, int k) {
    	return ("."+num).indexOf(Integer.toString(k));
    }
}

 

⚠️ 직접 풀어본 처음 풀이

🔗 코드

class Solution {
    public int solution(int num, int k) {
        int answer = 0;
        String strnum = Integer.toString(num);
        String strk = Integer.toString(k);
        answer = strnum.indexOf(strk)==-1 ? -1 : strnum.indexOf(strk)+1;
        return answer;
    }
}

 

🔍 해설

1. 두 숫자를 문자열로 변환하여

2. indexOf() 메서드로 위치를 찾고

3. 삼항연산자로 위의 결과값이 -1이면 -1을, 아니라면 +1을 하여 answer에 넣었다

 

✅ 개선할 점 

1. 삼항연산자식을 더 단순하고 가독성 있게 만들 수 있다

        answer = strnum.indexOf(strk);
        return answer==-1 ? answer : answer+1;

 

2. num에 기호를 하나 추가하면 숫자 index를 1부터 셀 수 있게 돼서 더 간결하게 만들 수 있다

class Solution {
    public int solution(int num, int k) {
    	return ("."+num).indexOf(Integer.toString(k));
    }
}

 

📒 기억하고 갈 문법

int to String을 수행하는 두가지 방법이 있다

1. Integer.toString()

2. String.valueOf()

 

입력된 문자열이 null이라면

=> 첫번째는 null pointer 오류를 발생시키지만

=> 두번째는 "null"로 처리한다

 

null이면 오류일때에는 첫번째를,

오류가 아닌 상황에는 두번째를 사용하면 된다

 

* 참고 블로그: https://gocoder.tistory.com/2412