LV2_전화번호 목록(C++)

sonyrainy·2022년 7월 27일
0

프로그래머스_LV2

목록 보기
2/5

🚗문제 설명

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

구조대 : 119
박준영 : 97 674 223
지영석 : 11 9552 4421
전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.

🚓제한 조건

phone_book의 길이는 1 이상 1,000,000 이하입니다.
각 전화번호의 길이는 1 이상 20 이하입니다.

🚕입출력 예시

🚕입출력 설명

입출력 예 #1
앞에서 설명한 예와 같습니다.

입출력 예 #2
한 번호가 다른 번호의 접두사인 경우가 없으므로, 답은 true입니다.

입출력 예 #3
첫 번째 전화번호, “12”가 두 번째 전화번호 “123”의 접두사입니다. 따라서 답은 false입니다.

🚐코드_1(사전식 배열 활용, substr() 대신 find()도 활용 가능하다.)

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

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

🚐코드_2(Hash 사용)

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

bool solution(vector<string> phone_book){
    
// HashMap 생성
    unordered_map<string, int> map;
    for (int i = 0; i < phone_book.size(); i++){
// key가 phone_number이 되도록하고, value를 1로 설정
        map[phone_book[i]] = 1;
    }

// 모든 전화번호의 substring이 HashMap에 존재하는지 확인
    for (int i = 0; i < phone_book.size(); i++){
        for (int j = 0; j < phone_book[i].size() - 1; j++){
            string phone_number = phone_book[i].substr(0, j + 1);
            if (map[phone_number]==1)
                return false;
        }
    }

// 접두어가 없는 경우 true 출력
    return true;
}

🚀+) Hash map

해싱된 맵이다. 맵은 key와 value 두 쌍으로 데이터를 보관하는 자료구조이다. key를 통한 value로의 접근이 빠르다. hash는 어떤 데이터를 특정 연산으로 특별한 값으로 변환하는 개념이다.


LV1을 풀면서 어느 정도 감이 온 건지 해당 숫자들을 사전식으로 정렬하면 그 부분의 바로 뒷 부분이랑만 비교하면 돼서 더 효율적일 것으로 생각했다.

직관적으로 하나하나 비교하고자 하는 것 말고, 다른 것을 사용해서 풀이하는 방법도 있을 것 같았다.

찾아보니 해시맵이라는게 있었다.

map, hash 등에 대해 잘 몰랐기 때문에 여러 부분 찾아보고 그랬다.

(map[key] → value) : key를 주면 key에 해당하는 value 값을 반환한다.

profile
@sonyrainy

0개의 댓글