전화번호들이 주어지고, 해당 전화번호가 다른 번호의 접두어인 경우가 하나라도 존재하면 false를 그렇지 않으면 true를 출력하는 문제
ex.
[123
, 123
45] → false
[123
, 45123
] → true
문자열이라서 sort를 사용할 생각을 아예 못하고 있었다…
대충 문자열 몇 개 넣어서 돌려보니, 숫자 순서대로(1), 길이 순서대로(2) 정렬되는 것을 알았다.
→ i번째랑 i+1번째만 비교하면 for문을 다 돌 필요가 없다!
주어진 전화번호 목록 정렬
i+1번째 전화번호가 i번째 전화번호 포함하는지 확인
이 때, 접두사인지 확인하기 위해서는 포함하는 index가 0임을 확인해야 함!
포함하면 false를 리턴
끝까지 확인했을 때, 포함하지 않는다면 true를 리턴
#include <string>
#include <vector>
#include <algorithm>
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+1].find(phone_book[i]) == 0) {
return false;
}
}
return true;
}
엄청 간단해서 … 당황스럽다 …