๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

[๋ฐฑ์ค€] 1543๋ฒˆ: ๋ฌธ์„œ ๊ฒ€์ƒ‰(๊ทธ๋ฆฌ๋””, ์™„์ „ํƒ์ƒ‰)

by ์ฃผ๋ฐœ2 2020. 2. 3.
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/1543

 

1543๋ฒˆ: ๋ฌธ์„œ ๊ฒ€์ƒ‰

์„ธ์ค€์ด๋Š” ์˜์–ด๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ์–ด๋–ค ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ์–ด๋–ค ๋‹จ์–ด๊ฐ€ ์ด ๋ช‡ ๋ฒˆ ๋“ฑ์žฅํ•˜๋Š”์ง€ ์„ธ๋ ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์„ธ์ค€์ด์˜ ํ•จ์ˆ˜๋Š” ์ค‘๋ณต๋˜์–ด ์„ธ๋Š” ๊ฒƒ์€ ๋นผ๊ณ  ์„ธ์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฌธ์„œ๊ฐ€ abababa์ด๊ณ , ๊ทธ๋ฆฌ๊ณ  ์ฐพ์œผ๋ ค๋Š” ababa๋ผ๋ฉด, ์„ธ์ค€์ด์˜ ์ด ํ•จ์ˆ˜๋Š” ์ด ๋‹จ์–ด๋ฅผ 0๋ฒˆ๋ถ€ํ„ฐ ์ฐพ์„ ์ˆ˜ ์žˆ๊ณ , 2๋ฒˆ๋ถ€ํ„ฐ๋„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋™์‹œ์— ์…€ ์ˆ˜๋Š” ์—†๋‹ค. ์„ธ์ค€์ด๋Š” ๋ฌธ์„œ์™€ ๊ฒ€์ƒ‰ํ•˜๋ ค๋Š” ๋‹จ์–ด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ทธ ๋‹จ์–ด๊ฐ€ ์ตœ๋Œ€ ๋ช‡ ๋ฒˆ ์ค‘๋ณต๋˜์ง€

www.acmicpc.net

์ฝ”๋“œ

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		String str = scan.nextLine();	// ๋ฌธ์„œ
		String word = scan.nextLine();	// ๊ฒ€์ƒ‰ํ•˜๊ณ  ์‹ถ์€ ๋‹จ์–ด
		int count = 0;	// ๋‹จ์–ด๊ฐ€ ์ค‘๋ณต๋˜์ง€์•Š๊ณ  ๋“ฑ์žฅํ•˜๋Š” ํšŸ์ˆ˜
		int index = 0;	// ๋ฌธ์„œ์—์„œ ๊ฒ€์ƒ‰ํ•  ๋‹จ์–ด๋ฅผ ์ฐพ์„ ๋•Œ ์‹œ์ž‘ํ•  ์ธ๋ฑ์Šค์˜ ๊ฐ’
         
		for(int i=index; i<=str.length() - word.length(); i++) {
			boolean flag = true;	// ์ค‘๋ณต๋œ ๋‹จ์–ด ๋“ฑ์žฅํ•˜๋Š”์ง€ ํŒ๋ณ„
			for(int j=0; j<word.length(); j++) {
				
				// ๋ฌธ์„œ์™€ ๊ฒ€์ƒ‰ํ•˜๋ ค๋Š” ๋‹จ์–ด๊ฐ€ ๋‹ค๋ฅผ๊ฒฝ์šฐ
				if(str.charAt(i+j) != word.charAt(j)) {
					flag = false;
					break;
				}
			}
			
			/*
			 * ๋ฌธ์„œ์™€ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋‹จ์–ด๊ฐ€ ๊ฐ™์„ ๊ฒฝ์šฐ
			 *  - ๋“ฑ์žฅ ํšŸ์ˆ˜ +1
			 *  - ๋‹ค์Œ ๋“ฑ์žฅํ•˜๋Š” ํšŸ์ˆ˜๋ฅผ ์ฐพ๊ธฐ์œ„ํ•ด ์ธ๋ฑ์Šค๋ฅผ ๋ฌธ์„œ์˜ ๊ธธ์ด๋งŒํผ ๋”ํ•œ๋‹ค.
			 */
			if(flag) {
				count ++;	
				index += word.length();
				i = index-1;
			}
			// ๋ฌธ์„œ์™€ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋‹จ์–ด๊ฐ€ ๋‹ค๋ฅผ ๊ฒฝ์šฐ
			// ๋ฐ”๋กœ ๋‹ค์Œ ์•ŒํŒŒ๋ฒณ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์ธ๋ฑ์Šค๋ฅผ +1 ํ•œ๋‹ค.
			else {
				index ++;
			}
		}
		System.out.println(count);
		scan.close();
	}

}

ํ’€์ด

์ฃผ์–ด์ง„ ๋ฌธ์„œ(๋ฌธ์ž์—ด)์—์„œ ์–ด๋–ค ๋‹จ์–ด๊ฐ€ ์ด ๋ช‡๋ฒˆ ๋“ฑ์žฅํ•˜๋Š”์ง€ ์ค‘๋ณต์„ ์ œ์™ธํ•˜๊ณ  ์„ธ์•„๋ฆฌ๋ฉด ๋œ๋‹ค.

๋ฌธ์„œ : ababababa

๋‹จ์–ด : aba

๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ, ๋ฌธ์„œ์˜ ๊ธธ์ด๋Š” 9, ๋‹จ์–ด์˜ ๊ธธ์ด๋Š” 3์ด๋‹ค. 

๋ฐ– for๋ฌธ์„ ๋ฌธ์„œ์˜ ๊ธธ์ด - ๋‹จ์–ด์˜ ๊ธธ์ด ๋งŒํผ ๋ฐ˜๋ณตํ•˜๋Š” ์ด์œ ๋Š”, ์œ„์˜ ์˜ˆ์‹œ์—์„œ ababababa <- ๋นจ๊ฐ„์ƒ‰ ๋งŒํผ๋งŒ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ํŒ๋‹จํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

1. ๋ฌธ์„œ์™€ ๋‹จ์–ด๊ฐ€ ๋‹ค๋ฅธ๊ฒฝ์šฐ

๋ฌธ์„œ: b

๋‹จ์–ด: a

flag ๋ณ€์ˆ˜๋ฅผ false๋กœ ์ €์žฅํ•œ ํ›„ ๋ฐ”๋กœ ์•ˆ์ชฝ for๋ฌธ์„ ๋น ์ ธ๋‚˜๊ฐ„๋‹ค.

 

 

2. ์•ˆ์ชฝ for๋ฌธ(๋ฌธ์„œ์™€ ๋‹จ์–ด๊ฐ€ ๋™์ผํ•œ์ง€ ์•„๋‹Œ์ง€ ํŒ๋‹จ)์ด ๋๋‚ฌ์„ ๊ฒฝ์šฐ,

๋งŒ์•ฝ ๋ฌธ์„œ์™€ ๋‹จ์–ด๊ฐ€ ๋™์ผํ•ด์„œ flag๊ฐ€ true์ผ ๊ฒฝ์šฐ

์ค‘๋ณต์„ ๋›ฐ์–ด๋„˜๊ธฐ ์œ„ํ•ด index ๊ฐ’์„ ๋ฌธ์„œ์˜ ๊ธธ์ด๋งŒํผ ๋”ํ•œ๋‹ค.

ababababa

aba 

์œ„์—์„œ ์•ž์— 3๊ฐœ๋Š” ๋™์ผํ•˜๋ฏ€๋กœ, ๋‹ค์Œ๊บผ(bababa)๋ถ€ํ„ฐ ํŒ๋‹จํ•˜๋ฉด ๋˜๋ฏ€๋กœ 3์„ ๋”ํ•œ๋‹ค.

i์— index - 1 ์„ ๋”ํ•œ ์ด์œ ๋Š” ๋ฐ– for๋ฌธ์—์„œ +1์„ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— -1์„ ๋”ํ•ด์ค€๋‹ค.

 

๋งŒ์•ฝ ๋ฌธ์„œ์™€ ๋‹จ์–ด๊ฐ€ ๋‹ฌ๋ผ์„œ flag๊ฐ€ false์ธ ๊ฒฝ์šฐ

์ด๋•Œ๋Š” ๋ฌธ์„œ์˜ ๋ฐ”๋กœ ๋‹ค์Œ ๋ฌธ์ž๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๊ธฐ์œ„ํ•ด index๋ฅผ ++ํ•ด์ค€๋‹ค.

 

* ๋ฌธ์ œ์—์„œ ์กฐ์‹ฌํ•  ์ ์€ ๋ฌธ์„œ์™€ ๋‹จ์–ด๋Š” ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž์™€ ๊ณต๋ฐฑ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค๊ณ  ๋‚˜์™€์žˆ๋‹ค.

* ๋”ฐ๋ผ์„œ ๊ณต๋ฐฑ์„ ์ฃผ์˜ํ•ด ๋ฌธ์„œ์™€ ๋‹จ์–ด๋ฅผ ์ž…๋ ฅ๋ฐ›์„๋•Œ next() ๊ฐ€ ์•„๋‹Œ nextLine() ๋กœ ์ž…๋ ฅ๋ฐ›์•„์•ผ ํ•œ๋‹ค.

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€