반응형
풀이코드
#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 원소 문자열의 접두사가 된다.
반응형
'Stack > Coding test' 카테고리의 다른 글
[C++ / Lv3] 베스트 앨범 (0) | 2022.02.10 |
---|---|
[C++ / Lv2] 위장 (0) | 2022.02.07 |
[C++ / Lv1] 완주하지 못한 선수 (0) | 2022.02.04 |
[C++ / Lv2] 문자열 압축 (0) | 2022.02.02 |
[C# / Lv2] H-Index (0) | 2022.01.19 |