Stack/Coding test
[C++ / Lv2] 전화번호 목록
Seo_re:
2022. 2. 5. 13:41
반응형
풀이코드
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool GetAnswer(const vector<string>&);
bool solution(vector<string> phone_book) {
sort(phone_book.begin(), phone_book.end());
bool answer = GetAnswer(phone_book);
return answer;
}
bool GetAnswer(const vector<string>& pb)
{
for(int i = 0; i < pb.size() - 1; i++)
{
if(pb[i] == pb[i + 1].substr(0, pb[i].size()))
{
return false;
}
}
return true;
}
- 문자열이라 정렬을 한 뒤 반복문으로 현재 원소와 다음 원소를 비교해서 bool값을 반환한다.
기타
- 풀긴 했는데 해시와는 거리가 먼 코드같아서 다른사람 풀이를 보다가 문제 의도대로 풀린 코드를 봤다.
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
bool solution(vector<string> phone_book) {
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])
{
return false;
}
}
}
return true;
}
- map을 써서 해시 값을 확인하고 전화번호 문자열(phone_number)을 vector의 원소 문자열과 비교해서 다르면 맵의 해시가 vector 원소 문자열의 접두사가 된다.
반응형