< 문제링크 >
https://www.welcomekakao.com/learn/courses/30/lessons/42577
< 풀이 >
1. 전화번호 목록을 오름차순으로 정렬
2. 인접한 항목들을 비교하면서 앞의 항목의 길이를 기준으로 뒤의 항목을 잘라내어 비교하여 같으면 return false
2-else. 모든 경우에 대해서 같은 항목이 없다면 return true
< 코드 >
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
bool solution(vector<string> phone_book) {
sort(phone_book.begin(), phone_book.end());
for (int i=0;i<phone_book.size() - 1; i++) {
if (phone_book[i] == phone_book[i + 1].substr(0, phone_book[i].size())) {
return false;
}
}
return true;
}
< 추가 >
substr이 생각나지 않는다면, 직접 문자열 비교를 구현하여 해결도 가능하다.
#include <string>
#include <vector>
using namespace std;
bool solution(vector<string> phone_book) {
for (string num : phone_book) {
for (string num2 : phone_book) {
if (num == num2) continue;
if (num.size() < num2.size()) continue;
bool flag = true;
for (int i = 0; i < num2.size(); i++) {
if (num[i] != num2[i]) flag = false;
}
if (flag) return false;
}
}
return true;
}
'알고리즘 > Programmers' 카테고리의 다른 글
Programmers / Stack, Queue / 기능개발 (0) | 2020.09.06 |
---|---|
Programmers / Stack, Queue / 주식가격 (0) | 2020.09.06 |
Programmers / hash / 완주하지 못한 선수 (0) | 2020.09.06 |
Programmers / hash / 위장 (0) | 2020.09.06 |
Programmers / hash / 베스트앨범 (0) | 2020.09.06 |