[Algorithm] ๐Ÿคฏ๋ฐฑ์ค€ 9935 ๋ฌธ์ž์—ด ํญ๋ฐœ

HaJingJingยท2021๋…„ 9์›” 4์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
119/119

0. ๋ฌธ์ œ

์ƒ๊ทผ์ด๋Š” ๋ฌธ์ž์—ด์— ํญ๋ฐœ ๋ฌธ์ž์—ด์„ ์‹ฌ์–ด ๋†“์•˜๋‹ค. ํญ๋ฐœ ๋ฌธ์ž์—ด์ด ํญ๋ฐœํ•˜๋ฉด ๊ทธ ๋ฌธ์ž๋Š” ๋ฌธ์ž์—ด์—์„œ ์‚ฌ๋ผ์ง€๋ฉฐ, ๋‚จ์€ ๋ฌธ์ž์—ด์€ ํ•ฉ์ณ์ง€๊ฒŒ ๋œ๋‹ค.

ํญ๋ฐœ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค.

  • ๋ฌธ์ž์—ด์ด ํญ๋ฐœ ๋ฌธ์ž์—ด์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ์—, ๋ชจ๋“  ํญ๋ฐœ ๋ฌธ์ž์—ด์ด ํญ๋ฐœํ•˜๊ฒŒ ๋œ๋‹ค. ๋‚จ์€ ๋ฌธ์ž์—ด์„ ์ˆœ์„œ๋Œ€๋กœ ์ด์–ด ๋ถ™์—ฌ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ๋งŒ๋“ ๋‹ค.
  • ์ƒˆ๋กœ ์ƒ๊ธด ๋ฌธ์ž์—ด์— ํญ๋ฐœ ๋ฌธ์ž์—ด์ด ํฌํ•จ๋˜์–ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค.
  • ํญ๋ฐœ์€ ํญ๋ฐœ ๋ฌธ์ž์—ด์ด ๋ฌธ์ž์—ด์— ์—†์„ ๋•Œ๊นŒ์ง€ ๊ณ„์†๋œ๋‹ค.

    ์ƒ๊ทผ์ด๋Š” ๋ชจ๋“  ํญ๋ฐœ์ด ๋๋‚œ ํ›„์— ์–ด๋–ค ๋ฌธ์ž์—ด์ด ๋‚จ๋Š”์ง€ ๊ตฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๋‚จ์•„์žˆ๋Š” ๋ฌธ์ž๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ๋Š” "FRULA"๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

    ํญ๋ฐœ ๋ฌธ์ž์—ด์€ ๊ฐ™์€ ๋ฌธ์ž๋ฅผ ๋‘ ๊ฐœ ์ด์ƒ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ž…๋ ฅ
์ฒซ์งธ ์ค„์— ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 1,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.

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

๋‘ ๋ฌธ์ž์—ด์€ ๋ชจ๋‘ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž์™€ ๋Œ€๋ฌธ์ž, ์ˆซ์ž 0, 1, ..., 9๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

์ถœ๋ ฅ
์ฒซ์งธ ์ค„์— ๋ชจ๋“  ํญ๋ฐœ์ด ๋๋‚œ ํ›„ ๋‚จ์€ ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค.

1. ์•„์ด๋””์–ด

๐Ÿ’ก ์Šคํƒ ์‚ฌ์šฉ
๐Ÿ’ก stack์— ๋ฌธ์ž์—ด์„ ํ•˜๋‚˜์”ฉ ๋„ฃ์Œ
๐Ÿ’ก stack ํฌ๊ธฐ๊ฐ€ bombํฌ๊ธฐ์™€ ๊ฐ™๊ฑฐ๋‚˜ ์ปค์ง€๋ฉด, bomb์‚ฌ์ด์ฆˆ๋งŒํผ stack์—์„œ ๊ฐ€์ ธ์™€์„œ bomb์™€ ๊ฐ™์€ ์ง€ ํŒŒ์•…ํ•จ
๐Ÿ’ก stack์—์„œ ๋นผ์˜จ ๋ฌธ์ž์—ด์ด bomb์™€ ๊ฐ™๋‹ค๋ฉด, stack์—์„œ ์ œ๊ฑฐํ•จ
๐Ÿ’ก stack์˜ ํฌ๊ธฐ๊ฐ€ 0์ด๋ฉด FRULA ์•„๋‹ˆ๋ผ๋ฉด stack์— ์žˆ๋Š” ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•จ

2. ํ•ต์‹ฌ ํ’€์ด

  1. stack์— ๋ฌธ์ž์—ด์„ ํ•˜๋‚˜์”ฉ ๋„ฃ์Œ
s.push(str[i]);
  1. stack ํฌ๊ธฐ๊ฐ€ bombํฌ๊ธฐ์™€ ๊ฐ™๊ฑฐ๋‚˜ ์ปค์ง€๋ฉด, bomb์‚ฌ์ด์ฆˆ๋งŒํผ stack์—์„œ ๊ฐ€์ ธ์™€์„œ bomb์™€ ๊ฐ™์€ ์ง€ ํŒŒ์•…ํ•จ
if(s.size() >= len) {
	boolean flag =true;
				
	int tmp = s.size()-len;
				
	for(int j=0; j<len; j++) {
		if(s.get(tmp+j) != bomb.charAt(j)) {
			flag = false;
			break;
		}
	}
}
  1. stack์—์„œ ๋นผ์˜จ ๋ฌธ์ž์—ด์ด bomb์™€ ๊ฐ™๋‹ค๋ฉด, stack์—์„œ ์ œ๊ฑฐํ•จ
if(flag) {
	for(int j=0; j<len; j++) {
		s.pop();
	}
}
  1. stack์˜ ํฌ๊ธฐ๊ฐ€ 0์ด๋ฉด FRULA ์•„๋‹ˆ๋ผ๋ฉด stack์— ์žˆ๋Š” ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•จ
bw.write(sb.length() > 0 ? sb.toString() : "FRULA");

3. ์ฝ”๋“œ

import java.io.BufferedWriter;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;

public class BOJ_9935 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringBuilder sb = new StringBuilder();
		
		char[] str = br.readLine().toCharArray();
		String bomb = br.readLine();
		Stack<Character> s = new Stack<Character>();
		int len = bomb.length();
		
		for(int i=0; i<str.length; i++) {
			s.push(str[i]);
			
			if(s.size() >= len) {
				boolean flag =true;
				
				int tmp = s.size()-len;
				
				for(int j=0; j<len; j++) {
					if(s.get(tmp+j) != bomb.charAt(j)) {
						flag = false;
						break;
					}
				}
				
				if(flag) {
					for(int j=0; j<len; j++) {
						s.pop();
					}
				}
			}
		}
		
		for(char c : s) {
			sb.append(c);
		}
		
		bw.write(sb.length() > 0 ? sb.toString() : "FRULA");
		bw.flush();
		bw.close();
		
	}

}

4. ๊ฒฐ๊ณผ


์„ฑ๊ณตโœจ

profile
๐ŸŒฑ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๐ŸŒฑ

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