[프로그래머스/C++]Lv.2 - 전화번호 목록

YH J·2023년 9월 26일
0

프로그래머스

목록 보기
157/168

문제 링크

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

내 풀이

set에 옮겨담는다. 사전순으로 자동 정렬된다.
사전순으로 정렬되어서 0번째가 1번째에서 find되지 않으면 그 뒤로도 전부 find되지 않으므로 그렇게만 비교하면된다.

내 코드

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

using namespace std;

bool solution(vector<string> phone_book) {
    bool answer = true;
    
    set<string> ss;
    
    for(auto& s : phone_book)
    {
        ss.insert(s);
    }
    
    for(auto iter1 = ss.begin(); iter1 != ss.end(); iter1++)
        for(auto iter2 = iter1; iter2 != ss.end(); iter2++)
            if(iter1 != iter2)
            {
                if(iter2->find(*iter1) == 0)
                    return false;
                else
                    break;
            }
    
    return answer;
}

다른 사람의 풀이

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

using namespace std;

bool solution(vector<string> phone_book) {
    bool answer = true;

    unordered_map<string, int> hash_map;
    for(int i = 0; i < phone_book.size(); i++)
        hash_map[phone_book[i]] = 1;

    for(int i = 0; i < phone_book.size(); i++) {
        string phone_number = "";
        for(int j = 0; j < phone_book[i].size(); j++) {
            phone_number += phone_book[i][j];
            if(hash_map[phone_number] && phone_number != phone_book[i])
                answer = false;
        }
    }

    return answer;
}

다른 사람의 풀이 해석

unordered_map에 string을 담고 int를 1로 해준다.
이중 for문을 사용해서 string phone_number에 처음 인덱스의 원소의 한 글자씩 넣어가는데 이 string이 map에 등록되어있고 현재i인덱스의 원소가 아니면 false를 리턴해준다.

profile
게임 개발자 지망생

0개의 댓글