[ 프로그래머스 ] 전화번호 목록
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42577
풀이
단순하게 sort로 정렬 후, loop문을 돌며 접두어인지 확인하여 해결할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <string>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
bool solution(vector<string> phone_book)
{
bool answer = true;
sort(phone_book.begin(), phone_book.end());
for (int i = 0; i < phone_book.size() - 1; i++)
{
if (phone_book[i].size() == phone_book[i + 1].size())
{
continue;
}
if (!phone_book[i + 1].find(phone_book[i]))
{
answer = false;
return answer;
}
}
return answer;
}
문제의 주제인 해시로 푸는 경우, 단어를 추출, 비교하여 정답을 구할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
bool solution(vector<string> phone_book)
{
unordered_map<string, int> map;
for (int i = 0; i < phone_book.size(); i++)
map[phone_book[i]] = 1;
for (int i = 0; i < phone_book.size(); i++)
{
for (int j = 0; j < phone_book[i].size() - 1; j++)
{
string phone_number = phone_book[i].substr(0, j + 1);
if (map[phone_number]) return false;
}
}
return true;
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.