상세 컨텐츠

본문 제목

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

카테고리 없음

by 움바둠바 2025. 6. 10. 12:28

본문

728x90

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

https://usowelcome.tistory.com/56

 

99클럽 코테 스터디 5일차 TIL : 전화번호 목록

https://school.programmers.co.kr/learn/courses/30/lessons/42577#qna 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘

usowelcome.tistory.com

 

엥 풀어봤던거다!

이번에는 안헤매고 한번에 정렬해서 풀었다..!

근데,,왜,,,해시에 들어가있지?????? 싶어서 다른사람풀이를 열심히 찾아봤다

 

1. 정렬

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

bool solution(vector<string> phone_book) {
    
    sort(phone_book.begin(), phone_book.end());
    
    int compj = 0;
    for(int i = 1; i<phone_book.size(); i++)
    {
        if(phone_book[i].compare(0, phone_book[compj].size(), phone_book[compj]) == 0)
        {
            // 접두어
            return false;
        }else{
            compj = i;
        }
    }
    
    
    return true;
}

문자열을 사전순으로 정렬됐을 때.. 뒤에 딸린게 많으면 뒷순위로 간다

-> 11911, 1191, 119 (X)

-> 119, 1191, 11911 (O) 이 순서로 정렬됨!! (문자열이니까)

 

그니까 바로 뒤에꺼랑 비교했을 때, (i, i+1) i가 i+1의 접두어가 아니면,,, i를 접두어로 가지는 애는 더이상 없는것!!

i+1과 i+2를 비교한다.

 

이제보니까 난 굳이 compj로 인덱스를 관리했는데 걍 i랑 i+1 비교하는식으로 해도 됐을것같당...

 

2. 해시

set을 활용하는것같다.

일단 모든 전화번호를 set에 넣어둔다

 

그리고 하나하나 비교를 하는데....

-> "11911"의 접두어를 찾는다면

   -> set에서 "1"찾기

   -> set에서 "11"찾기

   -> set에서 "119"찾기

   -> set에서 "1191"찾기

이것들중에 하나라도 찾아지면 접두어가 있는것!!!!! false를 반환한다.

 

해시의 find가 O(1)이라 생각할법한건가..?

 

#include <string>
#include <vector>
#include <unordered_set>

using namespace std;

bool solution(vector<string> phone_book) {
    
    unordered_set<string> set(phone_book.begin(), phone_book.end());
    
    for(int i = 0; i<phone_book.size(); i++)
    {
        for(int j = 1; j<phone_book[i].size(); j++)
        {
            if(set.find(phone_book[i].substr(0, j)) != set.end())
            {
                // 접두어 있음
                return false;
            }
        }
    }
    
    return true;
}

 

효율성도 정렬이 더 좋은데... 참 뭘까..............

 

nlogn과 nm의 차이인가?? 잘 모르게따..

728x90