티스토리 뷰

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

bool solution(vector<string> phone_book) {
    bool answer = true;
    sort(phone_book.begin(), phone_book.end());
    int i, j;
    for(i = phone_book.size()-1; i>=0; i--){
        for(j = 0; j<phone_book.size();j++){
            if( i == j || phone_book[i].length() < phone_book[j].length()) continue;
            if(phone_book[j] == phone_book[i].substr(0, phone_book[j].size())) {
                return false;
            }
        }
    }
    
    return answer;
}

 

if (phone_book[i].find(phone_book[j]) == 0 ) 으로 비교했더니, 테스트 케이스 8, 9번에서 자꾸 오류가 났다.

그래서 다른 사람들의 풀이를 봤는데 find를 안쓰고 substr으로 비교했다. 

결국 find랑 똑같은거 아닐까 생각했는데 substr으로 하니까 모두 통과됐다.

문자열.substr(0, 접두어크기)) == 접두어 , 문자열.find(접두어) == 0 

차이가 뭘까? find도 결국 시작 위치를 반환하는데 아무것도 없는 경우의 npos를 고려하지 못해서 그런가...

공부하면 할 수록 모르겠는 프로그래밍의 세계..

댓글