Programmers Review

[Lv 2] 전화번호 목록

hanseongbugi 2024. 8. 2. 17:35

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

맵에 같은 번호가 있으면 false반환하게 하면 된다.

이때 짧은 번호가 나중에 나올 수 있으니 문자열 길이로 sort 한 후 비교

 

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

bool bigger(string a, string b){
    if(a.length()<b.length())
        return true;
    else
        return false;
}

bool solution(vector<string> phone_book) {
    unordered_map<string,int> m;
    sort(phone_book.begin(),phone_book.end(),bigger);
    
    int minLen = 21;
    for(int i = 0;i<phone_book.size();i++){
        string number = phone_book[i];
        int numberLen = number.length();
        minLen = min(minLen, numberLen);
        if(m.empty())
            m[number] = 1;
        else{
            string temp = string(number.begin(),number.begin()+minLen);
            for(int j = minLen;j<number.length();j++){
                if(m[temp] == 1)
                    return false;
                temp += number[j];
                
            }
            m[number] = 1;
        }
    }
    return true;
}