https://programmers.co.kr/learn/courses/30/lessons/42577
코딩테스트 연습 - 전화번호 목록
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조
programmers.co.kr
아래 블로그를 보고 참고를 조금 했다.
String을 사용한다는 점을 활용해서 sort하는거에서 감탄했다
문자열 비교 로직
1. 동일한 위치(인덱스)의 문자와 비교했을 때 다를 경우, ASCII 코드 값을 기준으로 비교(ex. 'A' < 'B')
2. 서로 길이가 다를 경우, 앞에서 부터 시작해서 같은 부분이 있는 경우 길이가 짧은 순(ex. "12" < "123")
이 로직이 사용되기 때문에 바로 이전 string과 비교만 하면 되게 된다.
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool solution(vector<string> phone_book)
{
// 예외 처리
if(phone_book.size() <= 1)
return true;
sort(phone_book.begin(), phone_book.end());
// 이전 전화번호의 접두어일 경우 false!
for(int i = 1; i < phone_book.size(); i++)
{
if(phone_book[i].find( phone_book[i - 1]) == 0)
return false;
}
return true;
}
'c++ > 프로그래머스' 카테고리의 다른 글
프로그래머스 : 조이스틱 c++ (1) | 2021.06.20 |
---|---|
프로그래머스 : 위장 C++ (0) | 2021.06.19 |
프로그래머스 : 이중우선순위 큐 C++ (0) | 2020.11.19 |
프로그래머스 : 거스름돈 C++ (DP 사용) (0) | 2020.11.18 |
프로그래머스 : 기지국 설치 C++ (0) | 2020.11.03 |