본문 바로가기
백준

[1515] 수 이어 쓰기 (JAVA)

by 댈팽이 2024. 6. 12.
728x90

# 문제 설명

세준이는 1부터 N까지 모든 수를 차례대로 공백없이 한 줄에 다 썼다. 그리고 나서, 세준이가 저녁을 먹으러 나간 사이에 다솜이는 세준이가 쓴 수에서 마음에 드는 몇 개의 숫자를 지웠다.

세준이는 저녁을 먹으러 갔다 와서, 자기가 쓴 수의 일부가 지워져있는 모습을 보고 충격받았다.

세준이는 수를 방금 전과 똑같이 쓰려고 한다. 하지만, N이 기억이 나지 않는다.

남은 수를 이어 붙인 수가 주어질 때, N의 최솟값을 구하는 프로그램을 작성하시오. 아무것도 지우지 않을 수도 있다.)


입력

첫째 줄에 지우고 남은 수를 한 줄로 이어 붙인 수가 주어진다. 이 수는 최대 3,000자리다.


출력

가능한 N 중에 최솟값을 출력한다.

 

# 정답 코드

import java.io.*;
import java.util.*;

public class Main {
    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 input = br.readLine();
        Deque<Integer> stack = new ArrayDeque<>();

        for (int i = 0; i < input.length(); i++) {
            stack.addLast(input.charAt(i) - '0');
        }

        int answer = 0;
        while (!stack.isEmpty()) {
            answer++;
            String number = String.valueOf(answer);

            for (int i = 0; i < number.length(); i++) {
                int num = number.charAt(i) - '0';
                if (!stack.isEmpty() && stack.peek() == num) {
                    stack.pop();
                }
            }
        }

        bw.write(String.valueOf(answer));
        bw.flush();
    }
}

 

숫자를 순서대로 추가하고 peek()를 쓰기 위해 deque를 사용했다.

입력 받은 숫자를 deque에 순서대로 추가한다.

 

answer를 1씩 증가시키며 N을 구한다.

answer를 한 글자씩 보기 위해 String형으로 바꾸고 순회한다.

deque의 맨 앞에 있는 숫자와 현재 글자가 같으면 pop한다.

 

위 과정 중 stack이 비면 answer를 출력한다.

728x90

'백준' 카테고리의 다른 글

[2607] 비슷한 단어 (JAVA)  (1) 2024.06.13
[2870] 수학숙제 (JAVA)  (1) 2024.06.12
[20920] 영단어 암기는 괴로워 (JAVA)  (0) 2024.06.12
[1516] 게임 개발 (JAVA)  (0) 2024.04.14
[2252] 줄 세우기 (JAVA)  (0) 2024.04.14