N

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

프로그래머스 알고리즘/2단계

(프로그래머스 c++)전화번호 목록

naeunchan 2020. 5. 14. 15:49
728x90
반응형

카테고리는 해시가 나와있지만, 간단하게 sort()를 활용하여 문제를 풀었다..!

 

우선 phone_book을 오름차순으로 정렬을 한다.

그리고 for문으로 0 ~ phone_book.size() 만큼 반복하고,

안에서는 i + 1 ~ phon_book.size() 만큼 반복한다.

 

1번째 for문)str은 현재 전화번호, size는 str의 크기를 나타낸다.

2번째 for문)tmp는 str을 접두어로 가지고 있는지 비교하기 위한 임시 변수로, i + 1부터 끝까지 탐색한다.

substr을 이용하여 str의 size만큼 잘라내어 tmp에 저장한다.

그리고 tmp와 str을 비교하여 서로 같으면 바로 retrun false를 해주었다..!

만약 반복문을 끝까지 돌 때까지 return하지 않고 빠져나오면 한 번호가 다른 번호의 접두어인 경우가 없으니 true를 반환한다..!

 

간단한 문제..!

 

#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(); i++)
    {
        string str = phone_book[i];
        int size = str.size();
        
        for(int j = i + 1; j < phone_book.size(); j++)
        {
            string tmp = phone_book[j].substr(0, size);
            if(str == tmp)
                return false;
        }
    }
    return answer;
}
728x90
반응형