https://www.acmicpc.net/problem/1515
curNum
을 1부터 시작해서 완전탐색을 통해N
을 최소값으로 해서 가능한 값을 찾는다.
strNumPointerIndex
입력된 값에서 현재 가리키는 숫자의 위치 index를 의미한다.
strNumPointerIndex
를 증가시키면서 curNum
과 비교하면 된다.
입력값이 1111111 일때 strNumPointerIndex
는 1이되고 curNum
을 문자열로 만들어
자리수와 비교해서 1과 1이 같기 때문에 strNumPointerIndex
를 증가시킨다.
다음은 curNum
이 2부터 1이 들어가는 10까지 증가한 후
10에서 strNumPointerIndex
가 1이고 해당위치 값이 1로
10의 1과 일치하여 strNumPointerIndex
는 증가한다.
그리고 curNum
이 11이 되면
strNumPointerIndex
이 3일 때 1로 일치하여 strNumPointerIndex++
strNumPointerIndex
이 4일 때 1로 일치하여 strNumPointerIndex++
strNumPointerIndex
는 5가 된다.
이런식으로 반복하면서 1부터 숫자를 증가시켜 N
의 최소값을 찾으면 된다.
import java.io.*;
public class Main {
// input
private static BufferedReader br;
// variables
private static String str;
public static void main(String[] args) throws IOException {
br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
input();
bw.write(solve());
bw.close();
} // End of main()
private static String solve() {
StringBuilder sb = new StringBuilder();
int curNum = 1; // 1부터 시작해서 완탐
int strNumPointerIndex = 0; // str의 자리수 인덱스
int strLength = str.length();
while (strNumPointerIndex < strLength) {
String curNumStr = Integer.toString(curNum);
if (curNumStr.indexOf(str.charAt(strNumPointerIndex)) == -1) {
curNum++;
continue;
}
int curNumStrLen = curNumStr.length();
for (int i = 0; i < curNumStrLen; i++) {
if (str.charAt(strNumPointerIndex) == curNumStr.charAt(i)) {
// sequenceIndex의 문자값과 curNumStr의 i번째 값이 같을경우 sequenceIndex를 증가
strNumPointerIndex++;
if (strNumPointerIndex == strLength) {
break;
}
}
}
curNum++;
}
sb.append(curNum - 1);
return sb.toString();
} // End of solve()
private static void input() throws IOException {
str = br.readLine();
} // End of input()
} // End of Main class