참고
문제해설
문제 로직고민
NOTE
•
문제를 읽고 도저히 이해가 가지 않아서 풀이방법부터 확인했다.
특정 숫자를 모두 지우는게 아니라, 그냥 랜덤으로 지워진다..
◦
숫자의 범위가 3000이므로 1~3000의 숫자를 계속 탐색하면서 존재하는 숫자가 있는경우를 판단한다.
◦
11, 12와 같이 2자리를 넘어간다면, 해당 자릿수의 길이만큼 추가로 계산해줘야 한다.
작성코드
NOTE
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class _1515 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String[] s;
String num = br.readLine();
int idx = 0;
int i = 1;
while(true){
if(idx == num.length()) break;
String temp = String.valueOf(i);
while(temp.length() > 0 && idx < num.length()){
if(temp.charAt(0) == num.charAt(idx)){
idx++;
}
temp = temp.substring(1);
}
i++;
}
System.out.println(i-1);
}
}
Java
복사
처음에 for문으로 3000범위로만 탐색해서 틀렸다. (잘린 숫자의 범위가 3000이지 원본의 길이는 모름)
다른사람 풀이
NOTE
public class Main {
static String numStr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
numStr = br.readLine();
pro();
}
private static void pro() {
int check = 0;
for (int i = 1; i <= 30000; i++) {
String tmp = String.valueOf(i);
for (int j = 0; j < tmp.length(); j++) {
if (tmp.charAt(j) == numStr.charAt(check))
check++;
if (check == numStr.length()) {
System.out.println(i);
return;
}
}
}
}
}
Java
복사
왜 30000 범위내로 계산되는지 아직 이해를 못하겠다.