개발하는 kim-hasa

[c++][프로그래머스] 전화번호 목록 본문

Algorithm/Programmers(c++)

[c++][프로그래머스] 전화번호 목록

kim-hasa 2021. 8. 25. 16:39

https://programmers.co.kr/learn/courses/30/lessons/42577

 

코딩테스트 연습 - 전화번호 목록

전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조

programmers.co.kr

특정 번호가 다른 번호의 접두사인 경우가 있는지 확인하는 문제입니다.

 

되게 어렵게 벡터를 조정하고 있다가, 좋은 아이디어가 보여서 풀게 되었습니다.

 

string 의 경우 정렬하면 앞에서부터 같은 것끼리 인접하게 됩니다.

 

예를 들어, [123,12,13] 이 integer 일 경우 [12,13,123] 으로 정렬되지만,

string 인 경우 사전순으로 배열해서 [12,123,13] 식으로 정렬됩니다.

즉, 인접한 두 수만 비교하게 되면 접두사가 있는지 없는지 비교할 수 있게 됩니다.

#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());     // 정렬
    
    for(int i=0; i<phone_book.size() - 1; i++)
    {
        string str1 = phone_book[i];
        string str2 = phone_book[i+1];      // 인접한 두 번호 비교
        
        int len = str1.length();
        str2 = str2.substr(0,len);      // len 만큼 자름
        
        if(str1 == str2)
        {
            answer = false;
            return answer;
        }
    }
    
    return answer;
}