문제 링크

요약

  • 쉬운 문제

최종

  • 프로그래머스에는 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 분기를 하지 않아도 되긴 함.
    • 하지만 문제를 풀 때 확신이 들지 않는다면 그냥 저렇게 처리하는게 나을지도 모르겠다; 일부 코테에서는 아예 테스트케이스를 안주기도 하니까