GitHubSeob
C++ / 프로그래머스 / 전화번호 목록 본문
문제 |
https://programmers.co.kr/learn/courses/30/lessons/42577
코딩테스트 연습 - 전화번호 목록
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조
programmers.co.kr
문제풀이 |
한 번호가 다른 번호의 맨 앞에 있는 경우가 있는지를 확인하는 문제이다.
전화번호 목록을 크기 순으로 정렬하고, unordered_set을 이용하였다.
전화번호를 맨 앞부터 한 자리씩 str에 더한다.
전화번호가 저장된 unordered_set에서 str이 있는지 확인하고 있다면 바로 false를 return 한다.
끝까지 가도 없으면 현재 전화번호를 unordered_set에 저장한다.
코드 |
#include <string>
#include <vector>
#include <algorithm>
#include <unordered_set>
using namespace std;
bool cmp(string& s1, string& s2) {
return s1.size() < s2.size();
}
bool solution(vector<string> phone_book) {
sort(phone_book.begin(), phone_book.end(), cmp);
unordered_set<string>num;
string str("");
for (int idx = 0; idx < phone_book.size(); ++idx) {
str.clear();
for (int idx2 = 0; idx2 < phone_book[idx].size(); ++idx2) {
str += phone_book[idx][idx2];
if (num.find(str) != num.end()) return false;
}
num.insert(str);
}
return true;
}
'Programmers > Level 2' 카테고리의 다른 글
C++ / 프로그래머스 / 오픈채팅방 (0) | 2022.04.13 |
---|---|
C++ / 프로그래머스 / 가장 큰 수 (0) | 2021.11.12 |
C++ / 프로그래머스 / 주식가격 (0) | 2021.11.12 |
C++ / 프로그래머스 / 프린터 (0) | 2021.11.08 |
C++ / 프로그래머스 / 타겟 넘버 (0) | 2021.11.08 |