๐Ÿ’ฃ๋ฐฑ์ค€ 9935 : ๋ฌธ์ž์—ด ํญ๋ฐœ

๊ธ๊ธยท2025๋…„ 12์›” 6์ผ

์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชฉ๋ก ๋ณด๊ธฐ
28/31

๋ฌธ์ œ

๋ฐฑ์ค€ 9935 ๋ฌธ์ž์—ด ํญ๋ฐœ
๊ณจ๋“œ 4

๐Ÿ“Œ ๋ฌธ์ œ ์š”์•ฝ

์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์—์„œ ํญ๋ฐœ ๋ฌธ์ž์—ด(bomb) ์ด ๋“ฑ์žฅํ•  ๋•Œ๋งˆ๋‹ค ์ฆ‰์‹œ ์ œ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค.
ํญ๋ฐœ ๋ฌธ์ž์—ด์ด ์ œ๊ฑฐ๋˜๋ฉด ์–‘์ชฝ ๋ฌธ์ž์—ด์ด ํ•ฉ์ณ์ง€๊ณ , ํ•ฉ์ณ์ง„ ๋ฌธ์ž์—ด์—์„œ๋„ ๋‹ค์‹œ ํญ๋ฐœ ๋ฌธ์ž์—ด์ด ๋“ฑ์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ชจ๋“  ํญ๋ฐœ์ด ๋๋‚œ ํ›„ ๋‚จ์€ ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•˜๋ฉฐ, ์•„๋ฌด ๋ฌธ์ž๋„ ๋‚จ์ง€ ์•Š์œผ๋ฉด "FRULA" ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ“Œ ํญ๋ฐœ ๊ทœ์น™

  1. ๋ฌธ์ž์—ด ์•ˆ์— ํญ๋ฐœ ๋ฌธ์ž์—ด์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ๋ชจ๋“  ํญ๋ฐœ ๋ฌธ์ž์—ด์ด ํ•œ ๋ฒˆ์— ์ œ๊ฑฐ๋œ๋‹ค.
  2. ์ œ๊ฑฐ ํ›„ ๋ฌธ์ž์—ด์ด ์ด์–ด ๋ถ™๋Š”๋‹ค.
  3. ์ด์–ด ๋ถ™์ธ ๋ฌธ์ž์—ด์—์„œ๋„ ํญ๋ฐœ ๋ฌธ์ž์—ด์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
  4. ํญ๋ฐœ ๋ฌธ์ž์—ด์€ ์ค‘๋ณต ๋ฌธ์ž๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ“Œ ์ž…๋ ฅ

  • ์ฒซ์งธ ์ค„: ๋ฌธ์ž์—ด (๊ธธ์ด 1 ์ด์ƒ 1,000,000 ์ดํ•˜)
  • ๋‘˜์งธ ์ค„: ํญ๋ฐœ ๋ฌธ์ž์—ด (๊ธธ์ด 1 ์ด์ƒ 36 ์ดํ•˜)
  • ์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž + ์ˆซ์ž 0~9

๐Ÿ“Œ ์ถœ๋ ฅ

  • ๋ชจ๋“  ํญ๋ฐœ ๊ณผ์ •์„ ๋๋‚ธ ๋’ค ๋‚จ์€ ๋ฌธ์ž์—ด
  • ์•„๋ฌด ๊ฒƒ๋„ ๋‚จ์ง€ ์•Š์œผ๋ฉด "FRULA"

ํ’€์ด ๊ณผ์ •

์ดˆ๊ธฐ ์ ‘๊ทผ

๋ฌธ์ œ๋ฅผ ๋ณด์•˜์„ ๋•Œ๋Š” ๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ์—์„œ ๋„ฃ์–ด์„œ ํญ๋ฐœ ๋ฌธ์ž์—ด์ด ์žˆ๋Š”์ง€๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ์ˆœํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ฐ–์— ๋– ์˜ค๋ฅด์ง€ ์•Š์•˜๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ์ตœ๋Œ€ ๋ฐฑ๋งŒ๊ฐœ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์„ ๋‘๋ฒˆ๋งŒ ๋Œ์•„๋„ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ„ฐ์ ธ๋ฒ„๋ฆด ๊ฒƒ์ด๋‹ค.

์Šคํƒ ์‚ฌ์šฉ

์ด ๋ฌธ์ œ๋ฅผ ์Šคํƒ์„ ์ด์šฉํ•ด์„œ ํšจ์œจ์ ์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”Ž StringBuilder๋ฅผ ์Šคํƒ์ฒ˜๋Ÿผ ํ™œ์šฉ

  • ๋ฌธ์ž๋ฅผ ํ•˜๋‚˜์”ฉ append() ํ•˜๋ฉด์„œ ์Šคํƒ์ฒ˜๋Ÿผ ์Œ“๋Š”๋‹ค.
  • ๋ฐฉ๊ธˆ ๋„ฃ์€ ๋ฌธ์ž๊ฐ€ ํญ๋ฐœ ๋ฌธ์ž์—ด์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž์™€ ๊ฐ™๋‹ค๋ฉด,
  • ์Šคํƒ์˜ ๋’ค์ชฝ substring์ด ํญ๋ฐœ ๋ฌธ์ž์—ด๊ณผ ๊ฐ™์€์ง€ ๋น„๊ตํ•œ๋‹ค.
  • ๊ฐ™๋‹ค๋ฉด โ†’ ๊ทธ ๋ถ€๋ถ„์„ delete()๋กœ ์ œ๊ฑฐํ•œ๋‹ค.
  • ์ด ๊ณผ์ •์€ O(ํญ๋ฐœ ๋ฌธ์ž์—ด ๊ธธ์ด)๋งŒํผ๋งŒ ๊ฒ€์‚ฌํ•˜๋ฉด ๋˜๋ฏ€๋กœ ๋งค์šฐ ํšจ์œจ์ ์ด๋‹ค.

์ฆ‰, ๋ฌธ์ž์—ด ์ „์ฒด๋ฅผ ๋งค๋ฒˆ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์—†๊ณ ,
"์Šคํƒ ๋’ค์—์„œ ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ํ™•์ธ" ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ์‚ฌ์‹ค์ƒ O(N)์— ๊ฐ€๊น๋‹ค.

๊ตฌํ˜„ ์ƒ์„ธ

์ž๋ฐ”์—๋Š” ์Šคํƒ ํด๋ž˜์Šค๊ฐ€ ์žˆ์ง€๋งŒ ์˜ค๋ž˜๋˜์–ด ํšจ์œจ์„ฑ์ด ๋‚ฎ์•„๋„ ํ•œ๋‹ค.
ํ•ด๋‹น ๋ฌธ์ œ๋Š” ๋ฌธ์ž์—ด์ด๊ธฐ ๋•Œ๋ฌธ์— StringBuilder๋ฅผ ์Šคํƒ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

1) ๋ฌธ์ž๋ฅผ ํ•˜๋‚˜์”ฉ StringBuilder์— ์ถ”๊ฐ€

		StringBuilder sb = new StringBuilder();

		for (int i = 0 ; i < string.length();i ++) {
			//ํ•œ ๊ธ€์ž์”ฉ ๋„ฃ๊ธฐ 

			sb.append(string.charAt(i));

2) ํญ๋ฐœ ๊ฐ€๋Šฅ์„ฑ ์ฒดํฌ

  • ํ˜„์žฌ ์ถ”๊ฐ€ํ•œ ๋ฌธ์ž == ํญ๋ฐœ ๋ฌธ์ž์—ด์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž
  • ํ˜„์žฌ sb ๊ธธ์ด โ‰ฅ ํญ๋ฐœ ๋ฌธ์ž์—ด ๊ธธ์ด

์ด ์กฐ๊ฑด์ด ๋งŒ์กฑ๋˜๋ฉด ์‹ค์ œ๋กœ ํญ๋ฐœ ๋ฌธ์ž์—ด์ธ์ง€ ํ™•์ธํ•œ๋‹ค.

			//์ง€๊ธˆ ๋„ฃ๋Š” ์ˆ˜๊ฐ€ ํƒ€๊ฒŸ์˜ ๋งˆ์ง€๋ง‰๊ณผ ๊ฐ™๋‹ค๋ฉด...
			if (string.charAt(i) == target.charAt(target.length() - 1) && sb.length() >= target.length()) {
				boolean match = true;
				for (int j = 0 ; j < target.length(); j++) {
					if (sb.charAt(sb.length() -1 - j) != target.charAt(target.length() - 1 - j)) {
						match = false;
						break;
					}
				}
				//๋งŒ์•ฝ์— ๋ฌธ์ž์—ด์ด ๊ฐ™๋‹ค๋ฉด ํญ๋ฐœ ์ง„
				if (match) {
					sb.delete(sb.length() - target.length(), sb.length());
				}
			}
		}

3) ์ตœ์ข… ์ถœ๋ ฅ

		if (sb.length() == 0 ) {
			System.out.println("FRULA");
		} else {
			System.out.println(sb);
		}

์ „์ฒด์ฝ”๋“œ

package Algorithm;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class backjoon_๋ฌธ์ž์—ดํญ๋ฐœ {
	public static void main(String[] args) throws FileNotFoundException {
		// ์ž…๋ ฅ๊ฐ’ ๋ฐ›๊ธฐ
		System.setIn(new FileInputStream("src/input.txt"));

		Scanner sc = new Scanner(System.in);

		String string = sc.next();

		String target = sc.next();

		StringBuilder sb = new StringBuilder();

		for (int i = 0; i < string.length(); i++) {

			// ํ•œ ๊ธ€์ž์”ฉ ๋„ฃ๊ธฐ
			sb.append(string.charAt(i));
			System.out.println("์ถ”๊ฐ€ ํ›„ : " + sb);

			// ์ง€๊ธˆ ๋„ฃ๋Š” ์ˆ˜๊ฐ€ ํƒ€๊ฒŸ์˜ ๋งˆ์ง€๋ง‰๊ณผ ๊ฐ™๋‹ค๋ฉด...
			if (string.charAt(i) == target.charAt(target.length() - 1) && sb.length() >= target.length()) {
				boolean match = true;
				for (int j = 0; j < target.length(); j++) {
					if (sb.charAt(sb.length() - 1 - j) != target.charAt(target.length() - 1 - j)) {
						match = false;
						break;
					}
				}
				// ๋งŒ์•ฝ์— ๋ฌธ์ž์—ด์ด ๊ฐ™๋‹ค๋ฉด ํญ๋ฐœ ์ง„
				if (match) {
					sb.delete(sb.length() - target.length(), sb.length());
				}
			}
		}
		if (sb.length() == 0) {
			System.out.println("FRULA");
		} else {
			System.out.println(sb);
		}

	}
}

0๊ฐœ์˜ ๋Œ“๊ธ€