https://school.programmers.co.kr/learn/courses/30/lessons/42577#
set에 옮겨담는다. 사전순으로 자동 정렬된다.
사전순으로 정렬되어서 0번째가 1번째에서 find되지 않으면 그 뒤로도 전부 find되지 않으므로 그렇게만 비교하면된다.
#include <string>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
bool solution(vector<string> phone_book) {
bool answer = true;
set<string> ss;
for(auto& s : phone_book)
{
ss.insert(s);
}
for(auto iter1 = ss.begin(); iter1 != ss.end(); iter1++)
for(auto iter2 = iter1; iter2 != ss.end(); iter2++)
if(iter1 != iter2)
{
if(iter2->find(*iter1) == 0)
return false;
else
break;
}
return answer;
}
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
bool solution(vector<string> phone_book) {
bool answer = true;
unordered_map<string, int> hash_map;
for(int i = 0; i < phone_book.size(); i++)
hash_map[phone_book[i]] = 1;
for(int i = 0; i < phone_book.size(); i++) {
string phone_number = "";
for(int j = 0; j < phone_book[i].size(); j++) {
phone_number += phone_book[i][j];
if(hash_map[phone_number] && phone_number != phone_book[i])
answer = false;
}
}
return answer;
}
unordered_map에 string을 담고 int를 1로 해준다.
이중 for문을 사용해서 string phone_number에 처음 인덱스의 원소의 한 글자씩 넣어가는데 이 string이 map에 등록되어있고 현재i인덱스의 원소가 아니면 false를 리턴해준다.