프로그래머스 전화번호 목록 C++

2023. 10. 1. 18:32알고리즘

unordered map을 사용해서 해결했다.

모든 전화번호에 대해서 문자열 그대로 map 에 등록해둔다.

 

그리고 각각의 전화번호에 대해서 부분 문자열을 계산한 후에 이 부분문자열과 map에 등록된 문자열 중에 일치하는 것이 있는지 확인하고 만약 일치하는 것이 있다면 접두사가 겹치는 값이 있는 것이므로 false를 리턴하고 아니라면 true를 리턴하도록 코드를 작성했다.

 

#include <string>
#include <vector>
#include <unordered_map>
#include <iostream>

using namespace std;

unordered_map<string, int> m;

bool solution(vector<string> phone_book) {
    bool answer = true;
    for (int i=0;i<phone_book.size();i++){
        m[phone_book[i]]=1;
    }
    for (int i=0;i<phone_book.size();i++){
        string ss;
        for (int j=0;j<phone_book[i].size()-1;j++){
            ss+=phone_book[i][j];
            if (m[ss]==1){
                return false;
            }
        }
    }
    return answer;
}