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

YH·2024년 1월 10일
0

문제

전화번호 목록 : 문제 링크


문제 분석

  • 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 한다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사이다.
  • 구조대 : 119
  • 박준영 : 97 674 223
  • 지영석 : 11 9552 4421
  • 전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성

  • 제한 사항

  • phone_book의 길이는 1 이상 1,000,000 이하이다.
  • 각 전화번호의 길이는 1 이상 20 이하이다.
  • 같은 전화번호가 중복해서 들어있지 않다.
  • sort() 함수를 사용하여 배열 phone_book을 사전 오름차순으로 정렬. for loop를 사용하여 phone_book의 첫번째부터 마지막 원소까지 순회하고, if문을 사용하여 현재 인덱스의 원소와 다음 인덱스의 원소에서 현재 인덱스 원소의 크기만큼 자른 문자열이 동일하다면 접두어 임을 의미하므로 false를 return. loop를 탈출 했다면, 어떤 번호가 다른 번호의 접두어인 경우가 없음을 의미하므로 true를 return

algorithm 헤더의 sort() 함수 사용법
void sort(T start, T end, Compare comp); //comp 인자가 공란이면 오름차순 정렬

  • sort(v.begin(), v.end(), compare); // 사용자 정의 함수 사용
  • sort(v.begin(), v.end(), greater<자료형>()); // 내림차순
  • sort(v.begin(), v.end(), less<자료형>()); // 오름차순

string 헤더의 substr() 함수 사용법
1. substr(시작인덱스, 문자열 길이)
=> 시작인덱스 부터 주어진 문자열 길이만큼 추출
2. substr(시작인덱스)
=> 시작인덱스 부터 문자열 끝까지 추출


풀이

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

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;
}
profile
Keep Recycling Your Dreams

0개의 댓글