Search
Duplicate
📒

[Baekjoon] 01-03. 수 이어 쓰기 ⭐

상태
완료
수업
Algorithm Solving
주제
Baekjoon
4 more properties
참고

문제해설

NOTE
입력 값 ⇒ 1~N까지의 숫자를 작성하고, 특정 숫자가 지워진 값
출력 값 ⇒ 가능한 N중에 최소값

문제 로직고민

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 범위내로 계산되는지 아직 이해를 못하겠다.