๋ฌธ์
์ ํ๋ฒํธ ๋ชฉ๋ก ๋ฌธ์ ๋ฐ๋ก ๊ฐ๊ธฐ
ํ์ด
๋ณด์๋ง์ ํธ๋ผ์ด(Trie)๊ฐ ์๊ฐ๋ฌ๋ค. ๋ฌธ์์ด ๊ธธ์ด๋ 20 ์ดํ์ด๋ ์ต๋ ๋์ด๊ฐ 20์ธ ํธ๋ฆฌ๋ฅผ ๋ง๋ค๋ฉด ๋ ๊ฒ ๊ฐ๋ค. ํ์ง๋ง ์ฐ๊ฒฐ๋ฆฌ์คํธ ๊ตฌํ์ด ๋๋ฌด ๊ท์ฐฎ๊ธฐ๋ ํ๊ณ , ์
๋ ฅ์ ๋ฒ์๊ฐ 10^6์ด๋ผ O(nlgn) ์ดํ๋ก ํ ๋ฒ์ ํด๊ฒฐํ ์ ์๋ ์ฌ์ด ๋ฐฉ๋ฒ์ด ์์ง ์์๊น ์๊ฐํ๋ค. ์ ๋ ฌ๋์ด ์๋ phone_book์ ํ ๋ฒ์ ํ์ผ๋ฉด ๋ฑ์ฅํ๋ ๋ฌธ์์ด์ ํฌํจํ๊ณ ์๋ ์ง๋ฅผ ํ์ธํ๋ฉด ๋๋๋ฐ, ์ผ๋ฐ์ ์ผ๋ก ๋ฑ์ฅํ๋ ๋ชจ๋ ๋ฌธ์์ด์ ๋ค์ ์ํํ๋ ๋ฐฉ์์ "์ ๋ ฌ๋น์ฉ (O(nlgn)) + ์ํ๋น์ฉ (O(n^2))" ์ด๋ผ ์๊ฐ๋ณต์ก๋๊ฐ ์๋นํ๋ค. ๋ฐ๋ผ์, ํ ๋ฒ์ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ์ฆ๊ฐ์ํค๊ณ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ ์ํฌ ๋ฐฉํฅ์ ์ฐพ์์ผ ํ๋๋ฐ ์ด ๋ ์๊ฐํ ๊ฒ์ด map ์๋ฃ ๊ตฌ์กฐ์ด๋ค.
{ key : ์ ํ๋ฒํธ, value : ์๋ฌด ๊ฐ } ์ผ๋ก ๋์ด์๋ map์ ์์ฑ ํ ํ์, ๊ฐ ์ ํ๋ฒํธ๋ฅผ ์์์๋ถํฐ ํ ๊ธ์์ฉ ๋๋ ค๊ฐ๋ฉฐ map์ ํด๋น ๋ฌธ์์ด์ด ์๋ ์ง ๋ณด๋ฉด ๋๋ค. ์ ํ๋ฒํธ๋ 20 ์ดํ์ด๋ฏ๋ก "์ ๋ ฌ๋น์ฉ (O(nlgn)) + ์ํ ๋น์ฉ (O(n*20))" ์ธ ์ด O(nlgn)์ ์๊ฐ๋ณต์ก๋๋ก ํด๊ฒฐ ํ ์ ์๋ค.
์ฝ๋
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
bool solution(vector<string> phone_book) {
map<string, bool> phoneMap;
sort(phone_book.begin(), phone_book.end()); // ์ ํ๋ฒํธ ์ ๋ ฌ
for(int i=0; i<phone_book.size(); i++){
string phoneNumber = phone_book[i];
for(int j=1; j<=phoneNumber.size(); j++){
string str = phoneNumber.substr(0, j); // ํ ๊ธ์์ฉ ๋๋ ค๊ฐ๋ฉฐ
if(phoneMap[str]) { // ์ด๋ฏธ ๋์จ ์ ์๋ ๋ฒํธ์ธ์ง ํ์ธ
return false;
}
}
phoneMap[phoneNumber] = true; // map์ ์ ํ๋ฒํธ ๋ฑ๋ก
}
return true;
}
๊ฒฐ๊ณผ
Comment