본문 바로가기

알고리즘/Programmers

Programmers / hash / 전화번호 목록

< 문제링크 >

https://www.welcomekakao.com/learn/courses/30/lessons/42577

< 풀이 >

1. 전화번호 목록을 오름차순으로 정렬

2. 인접한 항목들을 비교하면서 앞의 항목의 길이를 기준으로 뒤의 항목을 잘라내어 비교하여 같으면 return false

2-else. 모든 경우에 대해서 같은 항목이 없다면 return true

< 코드 >

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

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

< 추가 >

substr이 생각나지 않는다면, 직접 문자열 비교를 구현하여 해결도 가능하다.

#include <string>
#include <vector>

using namespace std;

bool solution(vector<string> phone_book) {
    for (string num : phone_book) {
        for (string num2 : phone_book) {
            if (num == num2) continue;
            if (num.size() < num2.size()) continue;
            bool flag = true;
            for (int i = 0; i < num2.size(); i++) {
                if (num[i] != num2[i]) flag = false;
            }
            if (flag) return false;
        }
    }
    return true;
}