[๋ฐฑ์ค/C++] 5052. ์ ํ๋ฒํธ ๋ชฉ๋ก
๋ฌธ์
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๋ก ํ ์ ์๋ ๋ฌธ์ ๋ผ๊ณ ํ๋ค! -> ์ด๊ฒ ์ ์ ๋ฐฉ์์ธ๋ฏ