알고리즘/문제 풀이

프로그래머스 - 전화번호 목록(c++)

qqlzzb 2022. 6. 17. 11:35

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

 

코딩테스트 연습 - 전화번호 목록

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

programmers.co.kr

 

풀이

A = 119, B = 11914332인 경우와 같이 A 전화번호가 B 전화번호의 앞부분과 같다면 A는 B의 접두어이다. 전화번호 목록이 주어졌을 때, 접두어가 있다면 false, 없다면 true를 리턴하면 된다.

먼저 입력된 전화번호 목록을 정렬한다. 이렇게 하면 인접한 전화번호만 확인하면 접두어가 사용되었는지를 확인할 수 있다. for문을 돌면서 문자 하나하나를 비교하여 일치한다면 false를 리턴한다.

 

코드

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

using namespace std;

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

'알고리즘 > 문제 풀이' 카테고리의 다른 글

백준 2178 - 미로 탐색(C++)  (0) 2022.06.20
백준 4963 - 섬의 개수(C++)  (0) 2022.06.19
백준 1269 - 대칭 차집합  (0) 2022.06.07
백준 9613 - GCD 합  (0) 2022.06.05
백준 4948 - 베르트랑 공준  (0) 2022.06.04