[c++] BOJ 1013 :: Contact

๋ฌธ์ œ

[Contact ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ]

์ „ํŒŒ์˜ ๊ธฐ๋ณธ ๋‹จ์œ„๋Š” { 0 , 1 } ๋‘ ๊ฐ€์ง€๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ์œผ๋ฉฐ, x+ (  ) ๋Š” ์ž„์˜์˜ ๊ฐœ์ˆ˜(์ตœ์†Œ 1๊ฐœ) x์˜ ๋ฐ˜๋ณต์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ „ํŒŒ์˜ ์ง‘ํ•ฉ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.๋ฐ˜๋ณต์„ ์˜๋ฏธํ•˜๋Š” + ์™ธ์—๋„ or ๋ฅผ ์˜๋ฏธํ•˜๋Š” | ๊ธฐํ˜ธ๊ฐ€ ์žˆ๋‹ค. { x | y } ๋Š” x ํ˜น์€ y ๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์œผ๋กœ, { 0+ | 1+ } ๋Š” { 0 , 1 , 00 , 11 , 000 , 111 , โ€ฆ } ์˜ ์ง‘ํ•ฉ์„ ์˜๋ฏธํ•œ๋‹ค. ์•„๋ž˜๋Š” ๋‘ ๊ธฐํ˜ธ๋ฅผ ๋ณตํ•ฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ ์˜ˆ์ด๋‹ค.

  • (100+1+ | 01)+

๊น€๋™ํ˜ ๋ฐ•์‚ฌ๋Š” ๋‹ค์–‘ํ•œ ์ „ํŒŒ ๊ธฐ๋ก ์ค‘์—์„œ ์œ„์˜ ํŒจํ„ด์„ ์ง€๋‹ˆ๋Š” ์ „ํŒŒ๋ฅผ ๊ฐ€๋ ค๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ํ•„์š”๋กœ ํ•œ๋‹ค. ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ.

 

ํ’€์ด

ํŒจํ„ด์ด ์ •ํ•ด์ ธ์žˆ๊ณ  ๊ฐ ํŒจํ„ด์˜ ์‹œ์ž‘ ๋ฌธ์ž๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ๊ฐ์˜ ํŒจํ„ด์— ํ•ด๋‹นํ•˜๋Š” ์ง€๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค์–‘ํ•œ ํŒจํ„ด์œผ๋กœ ํ•ด์„๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์ด๋‹ค.

011000111001

์ฒ˜์Œ ํ’€์—ˆ์„ ๋•Œ "01", "100,,,1,,," ํŒจํ„ด์„ ์กฐ์‚ฌํ•˜๋ฉด์„œ ํ›„์ž์˜ ํŒจํ„ด์—์„œ 1 ์ดํ›„์— ์˜ค๋Š” 0์„ ์ฐพ๋Š” ์‹์œผ๋กœ ํ’€์ด๋ฅผ ๊ตฌ์„ฑํ•˜์˜€๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋‹ˆ ์œ„์˜ ํŒจํ„ด์€ "01 1000111 001"๋กœ ํ•ด์„๋  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ดํ›„์— ๋‚˜์˜ค๋Š” 001์ด ์•„๋ฌด ํŒจํ„ด๊ณผ๋„ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ NO๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ๋˜์–ด๋ฒ„๋ ธ๋‹ค. ํ•˜์ง€๋งŒ ํ•ด๋‹น ํŒจํ„ด์€ "01 100011 1001"์œผ๋กœ "YES"๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋Š” ์˜ˆ์ œ์ด๋‹ค. ๋”ฐ๋ผ์„œ 100+1+ ํŒจํ„ด์—์„œ 1์˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฒดํฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ•˜์˜€๊ณ , ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ ์žฌ๊ท€๋กœ ํ•จ์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•˜์˜€๋‹ค.

 

์ฝ”๋“œ

#include <iostream>
#include <string>
using namespace std;

int findPattern(string str){ // 0:YES, 1:NO
	if(str.length() == 0) return 0;
	if(str[0] == '0'){ // 01 ํŒจํ„ด
		if(str.length() >= 2 && str[1] == '1'){
			str = str.substr(2);
			return findPattern(str); // ํŒจํ„ด ์ œ๊ฑฐ ํ›„ ์žฌ๊ท€
		}
		return 1;
	}else{ // 100+1+ ํŒจํ„ด
		if(str.length() >= 4 && str.substr(0, 3) == "100"){
			str = str.substr(3); // 100 ์ œ๊ฑฐ
			int startIdx = str.find('1');
			if(startIdx == string::npos){ // 1์ด ์—†์œผ๋ฉด ์‹คํŒจ
				return 1;
			}
            
			str = str.substr(startIdx); // 1 ์ด์ „์˜ ๋ฌธ์ž๋“ค ์ œ๊ฑฐ
			while(str.length() >= 1 && str[0] == '1'){
            	// ๋ฌธ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ์ œ๊ฑฐํ•ด๊ฐ€๋ฉฐ ์„ฑ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ์ฒดํฌ
				str = str.substr(1);
				if(findPattern(str) == 1){
					continue;
				}
				return 0; // ์„ฑ๊ณต
			}
			return findPattern(str); // ํŒจํ„ด ์ œ๊ฑฐ ํ›„ ์žฌ๊ท€
		}
		return 1;
	}
}

int main() {
	int T; cin >> T;
	while(T--){
		string str; cin >> str;
        
		if(findPattern(str) == 1) cout << "NO" << '\n';
		else cout << "YES" << '\n';
	}
}c++

 

๊ฒฐ๊ณผ

 

์ฆ๋ง ์ˆ์ฝ”๋”ฉ ๋ชปํ•˜๋Š” ๋‚˜ ใ…Ž...

๋ฐ˜์‘ํ˜•