문제 링크
요약
- 쉬운 문제
최종
결과
- 프로그래머스에는 mapset으로 분류되어 있으나, 문제를 딱 봤을때 드는 생각은 Trie 아니면 sort이다. 그래서 그냥 sort로 품
#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 = 1; i < phone_book.size(); i++) {
if (phone_book[i].size() == phone_book[i - 1].size()) {
if (phone_book[i] == phone_book[i - 1]) {
return false;
}
} else if (phone_book[i].size() < phone_book[i - 1].size()) {
if (phone_book[i] == phone_book[i - 1].substr(0, phone_book[i].size())) {
return false;
}
} else {
if (phone_book[i].substr(0, phone_book[i - 1].size()) == phone_book[i - 1]) {
return false;
}
}
}
return true;
}- 여담으로, C++에서
substr의 범위가 초과하면 에러가 안나고 그냥 끝까지 포함된걸로 간주해서 결과를 뱉는다. 그래서 사실 위 코드처럼for문 안에if분기를 하지 않아도 되긴 함.- 하지만 문제를 풀 때 확신이 들지 않는다면 그냥 저렇게 처리하는게 나을지도 모르겠다; 일부 코테에서는 아예 테스트케이스를 안주기도 하니까
