Algorism/백준

[백준] 1515번 : 수 이어 쓰기 - JAVA [자바]

어린콩개발자 2024. 6. 5. 15:05

https://www.acmicpc.net/problem/1515

 


문제

 

약간의 그리디 알고리즘을 가미한 구현문제이다.

 

입력으로 주어지는 수는 3000자리이고 0~9까지는 10개이다. 3000 * 10 = 30000 이내에서 2초동안 모두 찾을 수 있다.

 

입력값 290119으로 예시를 들겠다.

 

이 문자열의 문자마다 위치를 가르키는 index가 있다.

 

그리고 1 부터 시작하는 값 Num의 각자리수와 비교를 해준다.

 

Num이 2일때를 생각해보자.

 

이때의 index는 0이다. 

 

290119의 0의 인덱스 위치는 2이다. Num과 인덱스 위치의 값이 같기 때문에 index를 증가시킨다. (index = 1)

 

이후 Num이 9일때도 마찬가지로 index를 증가시킨다. (index = 2)

 

그다음 Num이 10일때는 10의 자리수의 값과 index위치의 0의 값은 일치하지 않지만 Num의 1의 자리수의 값과 같기때문에 index를 증가시킨다 (index = 3)

 

이런식으로 완전 탐색을 진행하다 보면 index의 값이 입력값의 길이보다 커질것이다. 이때 이 루프 로직을 종료시킨다면. 그때의 Num 값이 문제가 요구하는 답이 된다.

 

이 문제는 아이디어를 코딩하는 것은 어렵지 않다. 하지만 이 아이디어를 생각하는게 어렵다고 생각된다.

 


전체 코드

public class Main {
	
    public static void main(String[] args) throws Exception {
    	System.setIn(new FileInputStream("./input.txt"));
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = null;
        StringBuilder sb = null;
        
        // 234092
        
        String str = in.readLine();
        int num = 0;
        int index = 0;
        boolean flag = true;
        
        while(flag) {
        	num++;
        	
        	String numStr = Integer.toString(num);
        	
        	for(int i = 0; i < numStr.length(); i++) {
        		char c = numStr.charAt(i);
        		
        		if(c == str.charAt(index)) {
        			index++;
        		}
        		
        		if(index == str.length()) {
        			flag = false;
        			break;
        		}
        	}
        }
        
        System.out.println(num);
        
    }
}

결과