๊ธฐ๋ก๋ฐฉ

BOJ_9935 : ๋ฌธ์ž์—ด ํญ๋ฐœ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_9935 : ๋ฌธ์ž์—ด ํญ๋ฐœ

Soom_1n 2024. 3. 1. 23:08

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

9935๋ฒˆ: ๋ฌธ์ž์—ด ํญ๋ฐœ

์ฒซ์งธ ์ค„์— ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 1,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. ๋‘˜์งธ ์ค„์— ํญ๋ฐœ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ๊ธธ์ด๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 36๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. ๋‘ ๋ฌธ์ž์—ด์€ ๋ชจ

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ๊ธฐ๋ณธ ๋ฌธ์ž์—ด๊ณผ ํญ๋ฐœ ๋ฌธ์ž์—ด์ด ์ž…๋ ฅ๋œ๋‹ค.
  • ๊ธฐ๋ณธ ๋ฌธ์ž์—ด์—์„œ ํญ๋ฐœ ๋ฌธ์ž์—ด ๋ถ€๋ถ„์ด ํญ๋ฐœํ•˜๋ฉฐ ์ง€์›Œ์ง€๊ณ , ๋‚จ์€ ๋ฌธ์ž์—ด์€ ๋‹ค์‹œ ์ด์–ด ๋ถ™๋Š”๋‹ค.
  • ๋” ํญ๋ฐœํ•  ๋ฌธ์ž์—ด์ด ๋‚จ์ง€ ์•Š์•˜์„ ์ƒํƒœ์˜ ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค.
    • ๋‚จ์€ ๋ฌธ์ž๊ฐ€ ์—†์œผ๋ฉด "FRULA"๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. 

๐Ÿ”ธ ๋ฌธ์ œ ํ’€์ด ๐Ÿ”ธ

  • ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ 100๋งŒ์ด๊ธฐ ๋•Œ๋ฌธ์— O(n^2) ๋ฏธ๋งŒ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
    • ๋ฐ˜๋ณต๋ฌธ ํ•œ ๋ฒˆ์— ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
  • ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์ด ์ƒ๊ธฐ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋ฌธ์ž ๋ฐฐ์—ด์˜ ์Šคํƒ ๊ตฌ์กฐ๋กœ ํญ๋ฐœ ๋ฌธ์ž์—ด์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
    • ํญ๋ฐœ ๋ฌธ์ž์—ด์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž์ด๋ฉด, ์Šคํƒ์—์„œ ํญ๋ฐœ ๋ฌธ์ž์—ด ํฌ๊ธฐ๋งŒํผ ๊บผ๋‚ด์„œ ํ™•์ธํ•œ๋‹ค.
    • ํญ๋ฐœํ•˜๋ฉด ์ง€์šฐ๊ณ , ํญ๋ฐœํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹ค์‹œ ์Šคํƒ์— ๋„ฃ์–ด์ค€๋‹ค.
  • ์Šคํƒ์— ๋‚จ์€ ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

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

public class Main {
    private static Stack<Character> stack;
    private static char[] boom;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        char[] chars = br.readLine().toCharArray();
        boom = br.readLine().toCharArray();

        int last = boom[boom.length - 1];

        stack = new Stack<>();

        for (char c : chars) { // ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด ๊ฒ€์‚ฌ
            if (stack.size() >= boom.length - 1 && c == last) { // ํญ๋ฐœ ๋ฌธ์ž์—ด์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž์™€ ๊ฐ™์œผ๋ฉด ํญ๋ฐœ๋˜๋Š”์ง€ ํ™•์ธ
                if (!boomCheck()) { // ์•ˆํ„ฐ์กŒ์œผ๋ฉด ์ง€๊ธˆ ๋ฌธ์ž ์Šคํƒ ๋„ฃ๊ธฐ
                    stack.push(c);
                }
            } else {
                stack.push(c);
            }
        }

        if (stack.size() == 0) {
            bw.write("FRULA");
        } else {
            StringBuilder sb = new StringBuilder();
            while (!stack.isEmpty()) sb.append(stack.pop());
            bw.write(sb.reverse().toString());
        }
        bw.flush();
    }

    private static boolean boomCheck() { // ํญ๋ฐœ ๊ฒ€์‚ฌ : ํ„ฐ์ง€๋ฉด ์‚ญ์ œ
        char c;
        for (int i = boom.length - 2; i >= 0; i--) {
            if (stack.isEmpty()) {
                for (int j = i + 1; j < boom.length - 1; j++) {
                    stack.push(boom[j]);
                }
                return false;
            } else if ((c = stack.pop()) != boom[i]) { // ํญ๋ฐœ ๋ฌธ์ž์—ด ์•„๋‹˜ : ๋ณต๊ตฌ
                stack.push(c);
                for (int j = i + 1; j < boom.length - 1; j++) {
                    stack.push(boom[j]);
                }
                return false;
            }
        }
        return true;
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ๊ธฐ๋ณธ ๋ฌธ์ž์™€ ํญ๋ฐœ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›์•„ char๋ฐฐ์—ด๋กœ ์ €์žฅํ•œ๋‹ค.
  • ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ํ•˜๋‚˜์”ฉ ๊ฒ€์‚ฌํ•ด ํญ๋ฐœ ๋ฌธ์ž์—ด์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๊ฐ€ ๋‚˜์˜ค๋ฉด boomCheck() ๋ฉ”์„œ๋“œ์—์„œ ํญ๋ฐœ์„ ํ™•์ธํ•œ๋‹ค.
    • ํญ๋ฐœํ•˜๋ฉด ์ง€์›Œ์ฃผ๊ณ , ํญ๋ฐœํ•˜์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ๋ฌธ์ž๋ฅผ stack์— ์ถ”๊ฐ€ํ•œ๋‹ค.
  • boomCheck() ์—์„œ stack์˜ ๋ฌธ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด ํญ๋ฐœ ๋ฌธ์ž์—ด๊ณผ ๋น„๊ตํ•œ๋‹ค.
    • ์Šคํƒ์ด ๋ชจ๋‘ ๋น„์–ด๋ฒ„๋ฆฌ๊ฑฐ๋‚˜ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธฐ๋ฉด, ๋ณต๊ตฌํ•œ๋‹ค.
    • ํญ๋ฐœ ๋ฌธ์ž์—ด์ด ์™„์„ฑ๋˜๋ฉด ๋ณต๊ตฌํ•˜์ง€ ์•Š๊ณ  true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์ตœ์ข… stack์— ๋‚จ์€ ๋ฌธ์ž์—ด์„ ํ™•์ธํ•ด ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ ๋ฌธ์ œ์—ฌ์„œ ์‰ฝ๊ฒŒ ๋ดค๋‹ค๊ฐ€ ๋งŽ์ด ํ‹€๋ฆฌ๊ฒŒ ๋˜์—ˆ๋‹ค.
    • ์ฒซ ์‹œ๋„๋Š” ํญ๋ฐœ ํ›„ ๋ฌธ์ž์—ด์„ StringBuilder๋กœ ๋ชจ์•„์„œ ๋‹ค์‹œ chars๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ๋ฐฉ์‹์ธ๋ฐ, ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์ด ๊ณ„์† ์ƒ์„ฑ๋˜์–ด์„œ ๊ทธ๋Ÿฐ์ง€ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.
    • ๋‘๋ฒˆ์งธ๋Š” ํญ๋ฐœ ๋ฌธ์ž์—ด์ด ๋‚จ์ง€ ์•Š์„ ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณต๋ฌธ์„ ๋‹ค์‹œ ๋„๋Š”๋ฐ, O(n^2)๋ผ์„œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.
    • ์„ธ๋ฒˆ์งธ๋Š” ์Šคํƒ ๊ตฌ์กฐ๋กœ ๋ณ€๊ฒฝํ–ˆ๋Š”๋ฐ ํญ๋ฐœ ๋ฌธ์ž์—ด์˜ ํฌ๊ธฐ๊ฐ€ 2์ดํ•˜๊ฑฐ๋‚˜, ์Šคํƒ์ด ๋น„์—ˆ์„ ๊ฒฝ์šฐ ๋“ฑ์˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด์„œ ํ‹€๋ ธ๋‹ค.
  • ์˜ค๋žœ๋งŒ์— ์Šคํƒ ๋ฌธ์ œ์—ฌ์„œ ์‹ ์„ ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

 

728x90