본문 바로가기
Algorithm

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

by SoyeonCha 2024. 11. 15.

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42577

 

메모

- 모든 전화번호 각각에 대해서 string 배열값 앞에서부터 비교? 더 작은 거 길이만큼 for문 돌려서 긴 거랑 비교해서 풀려고 했는데... 이렇게 되면 더 작은 모든 문자열에 대해서 for문을 돌려야 됨. 모든 문자열 개수-1 * 작은 문자열의 길이 만큼 for문 돌리면 시간 초과가 뜨겠지...

- 해시 맵에 가능한 문자열들을 value 값이 1인 key로 넣어서 그 해시맵을 대상으로 문자열들을 돌리는 코드를 작성해야 됨

 

 

맞힌 코드

#include <bits/stdc++.h>

using namespace std;

bool solution(vector<string> phone_book) {
    bool answer = true;
    
    // HashMap
    unordered_map<string, int> map;
    for (int i=0; i<phone_book.size(); i++){
        map[phone_book[i]] = 1;  // 전화번호 목록에 1개 존재함을 표시
    }
    
    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]){
                answer = false;
            }
        }
    }

    return answer;
}

 

 

참고)

https://coding-grandpa.tistory.com/90

 

[프로그래머스] 전화번호 목록 문제 풀이(해시 Lv. 2) - C++

0. 동일 유형 문제 [프로그래머스] 완주하지 못한 선수 (해시 Lv. 1) [프로그래머스] 전화번호 목록 (해시 Lv. 2) [프로그래머스] 위장 (해시 Lv. 2) [프로그래머스] 베스트 앨범 (해시 Lv. 3) Youtube 영상으

coding-grandpa.tistory.com

 

HashMap

https://dev-nicitis.tistory.com/52

 

UNSEEN 대비 4. C++ 주요 컨테이너 (2) (map, unordered_map)

해당 글은 다음 UNSEEN 대비 4. C++ 주요 컨테이너 (1) (array, vector, list) (tistory.com)에서 다루지 않은 나머지 컨테이너를 다루는 글입니다. 5. 맵(map) 맵(std::map)은 키(Key)와 값(value)의 쌍들을 저장하는 이

dev-nicitis.tistory.com

https://marmelo12.tistory.com/316

 

[C++ STL] std::unordered_map(연관 컨테이너)

std::unordered_map std::unordered_map은 HashTable로 구현된 자료구조로 탐색에 걸리는 시간 복잡도는 O(1) -> 상수시간복잡도. -> 기존의 std::map은 이진 탐색 트리로 탐색의 시간 복잡도는 O(logN)의 시간 복잡

marmelo12.tistory.com