문제
해결 방안 고민
•
처음에 문제가 잘 이해되지 않아서 꽤나 애를 많이 먹었던 문제다.
•
여러 가지로 생각을 해봤지만 구현을 어디서부터 해야 할지 막막했다.
해결 방법
•
다음 블로그를 참고하여 문제를 겨우 해결할 수 있었다.
•
입력으로 주어지는 수가 최대 3000자리, 0~9 까지의 숫자는 10개이므로 3000 * 10 = 30000 이내에서
모두 찾을 수 있다.
•
방법
◦
base를 1로 잡아서 1부터 30000까지 고려해야 한다.
▪
여기서 base는 String으로 선언한다. 테스트 케이스에서 굉장히 긴 길이의 숫자를 입력하는 것을 고려하기 위함이다.
◦
pointer 변수를 선언하여 base와 비교한다.
◦
pointer와 동일하면 base를 증가시킨다.
◦
base가 두 자리 이상의 숫자인 경우 해당 수를 [1, 0] 형태와 같이 나누어서 숫자 하나씩 비교한다. pointer와 동일하면 base를 증가시킨다.
◦
pointer 가 입력한 숫자의 일의 자리까지 비교가 끝나면 loop를 빠져 나간다. 그리고 최종적으로 확인된base를 출력한다.
코드
package algo250208;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.io.InputStreamReader;
// 수 이어 쓰기 - 실버 3
/*
입력으로 주어지는 수: 최대 3000자리
0~9까지는 10개
=> 3000 * 10 = 30000 이내에서 모두 찾아질 것임
*/
public class Baek1515 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String number = br.readLine();
int pointer = 0;
String base = null;
loop:
for (int i = 1; i < 30000; i++) {
base = String.valueOf(i); // base = 1 선언 (1부터 N까지 모든 수를 차례대로 입력)
int length = base.length();
for (int j = 0; j < length; j++) { // pointer와 비교
if (number.charAt(pointer) == base.charAt(j)) { // base와 pointer의 숫자가 동일하면 pointer 증가
pointer++;
}
// pointer와 입력한 숫자의 길이가 같으면 이중 for 문 루프 빠져나가기
if (pointer == number.length()) {
break loop;
}
}
}
bw.write(base);
bw.flush();
bw.close();
br.close();
}
}
Kotlin
복사