Hello Ocean! ๐ŸŒผ

[๋ฐฑ์ค€/C++] 5052. ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก ๋ณธ๋ฌธ

Algorithm

[๋ฐฑ์ค€/C++] 5052. ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก

bba_dda 2021. 7. 6. 20:51
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

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

 

์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก์ด ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ, ์ด ๋ชฉ๋ก์ด ์ผ๊ด€์„ฑ์ด ์žˆ๋Š”์ง€ ์—†๋Š”์ง€๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก์ด ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ ค๋ฉด, ํ•œ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ค๋ฅธ ๋ฒˆํ˜ธ์˜ ์ ‘๋‘์–ด์ธ ๊ฒฝ์šฐ๊ฐ€ ์—†์–ด์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก์ด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž

  • ๊ธด๊ธ‰์ „ํ™”: 911
  • ์ƒ๊ทผ: 97 625 999
  • ์„ ์˜: 91 12 54 26

์ด ๊ฒฝ์šฐ์— ์„ ์˜์ด์—๊ฒŒ ์ „ํ™”๋ฅผ ๊ฑธ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†๋‹ค. ์ „ํ™”๊ธฐ๋ฅผ ๋“ค๊ณ  ์„ ์˜์ด ๋ฒˆํ˜ธ์˜ ์ฒ˜์Œ ์„ธ ์ž๋ฆฌ๋ฅผ ๋ˆ„๋ฅด๋Š” ์ˆœ๊ฐ„ ๋ฐ”๋กœ ๊ธด๊ธ‰์ „ํ™”๊ฐ€ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ, ์ด ๋ชฉ๋ก์€ ์ผ๊ด€์„ฑ์ด ์—†๋Š” ๋ชฉ๋ก์ด๋‹ค. 

 

์ž…๋ ฅ๋œ ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก์— ๋Œ€ํ•ด ์ผ๊ด€์„ฑ์ด ์žˆ์œผ๋ฉด YES, ์—†์œผ๋ฉด NO๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์ด๋‹ค. 

๋ชฉ๋ก์— ๋˜‘๊ฐ™์€ ์ „ํ™”๋ฒˆํ˜ธ๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. 

ํ’€์ด

์ž…๋ ฅ๋œ ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก์„ ์ •๋ ฌํ•˜๊ฒŒ ๋˜๋ฉด, 

์ •๋ ฌ๋œ ์ƒํƒœ์—์„œ๋Š” 

i๋ฒˆ์งธ ์ „ํ™”๋ฒˆํ˜ธ๊ฐ€ i+1๋ฒˆ์งธ ์ „ํ™”๋ฒˆํ˜ธ์˜ ์ ‘๋‘์–ด๊ฐ€ ์•„๋‹ˆ๋ฉด, ํ•ด๋‹น ๋ชฉ๋ก์€ ์ผ๊ด€์„ฑ์ด ์žˆ๋Š” ๋ชฉ๋ก์ด๋‹ค. 

-> ์ •๋ ฌ๋œ ์ƒํƒœ์—์„œ๋Š” i๋ฒˆ์งธ์™€ i+1๋ฒˆ์งธ์˜ ๊ด€๊ณ„์— ๋Œ€ํ•ด์„œ๋งŒ ๊ฒ€์‚ฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค ! 

 

์ด๋ ‡๊ฒŒ๋˜๋ฉด ๋ฐ˜๋ณต ํšŸ์ˆ˜๊ฐ€ ํ™• ์ค„๊ฒŒ ๋œ๋‹ค. 

 

์ ‘๋‘์–ด์ธ์ง€ ์—ฌ๋ถ€๋Š”, 

i+1๋ฒˆ์งธ ์ „ํ™”๋ฒˆํ˜ธ์˜ 0๋ฒˆ์งธ ์ž๋ฆฌ๋ถ€ํ„ฐ i๋ฒˆ์งธ ์ „ํ™”๋ฒˆํ˜ธ์˜ ๊ธธ์ด ๋งŒํผ substr์„ ํ•ด์„œ, ํ•ด๋‹น substr์ด i๋ฒˆ์งธ ์ „ํ™”๋ฒˆํ˜ธ์™€ ๊ฐ™์€์ง€ ๋น„๊ตํ•˜๋ฉด ๋œ๋‹ค.

์ฝ”๋“œ

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;


int main() {
	int T, N;
	cin >> T;
	for (int t = 0;t < T;t++) {
		cin >> N;
		vector<string> numbers;
		for (int n = 0;n < N;n++) {
			string temp;
			cin >> temp;
			numbers.push_back(temp);
		}
        //์ •๋ ฌ
		sort(numbers.begin(), numbers.end());
		string before = numbers[0];
		string now;
		bool isOk = true; // ์ผ๊ด€์„ฑ์ด ์žˆ๋Š” ๋ชฉ๋ก์ธ์ง€ ์—ฌ๋ถ€
		for (int n = 1;n < N;n++) {
			now = numbers[n];
			// before๊ฐ€ now์— ์†ํ•˜๋Š”์ง€ ํ™•์ธ (before๊ฐ€ now์˜ ์ ‘๋‘์–ด์ธ์ง€)
			if (now.substr(0, before.size()) == before) {
				isOk = false;
				break;
			}
			before = now; // before ๊ฐฑ์‹ 
		}
		if (isOk) cout << "YES" <<endl;
		else  cout << "NO" << endl;
	}
}

๊ฒฐ๊ณผ

 

์ฐธ๊ณ  

 

B+ tree๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ผ๊ณ  ํ•œ๋‹ค! -> ์ด๊ฒŒ ์ •์„ ๋ฐฉ์‹์ธ๋“ฏ

๋ฐ˜์‘ํ˜•