문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42577
문제설명
입력으로 전화번호부가 주어지는데
전화번호부에서 어떤 번호가 다른번호의 접두사가되는 경우가 있으면 false 반환 없으면 true 반환 .
알고리즘
1. 첫번째 부터 순서대로 비교하는 건데 이때 비교대상이 자기보다 짧다 그럼 continue
(나보다 짧으면 내가 접두사가 될수 없으니까.)
2. 비교대상보다 길이가 길다 -> 그럼 현재 번호의 길이만큼 비교대상 번호 길이를 하나하나 비교하면 된다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
bool solution(vector<string> phone_book) {
bool answer = true;
bool flag = false;
for (int i = 0; i < phone_book.size(); i++) {
for (int k = 0; k < phone_book.size(); k++) {
//자기자신은 SKIP
if (i == k)continue;
//자기보다 길이가 짧으면 SKIP
if (phone_book[i].length() > phone_book[k].length()) continue;
for(int j = 0;j<phone_book[i].length();j++){
if (phone_book[i][j] != phone_book[k][j]) {
flag = true;
continue;
}
}
if (flag) {
flag = false;
continue;
}
//접두어인 경우
answer = false;
return answer;
}
}
return answer
}
|
cs |
'c++ > 프로그래머스' 카테고리의 다른 글
프로그래머스 : 타겟넘버 (0) | 2020.04.01 |
---|---|
프로그래머스 : k번째수 (0) | 2020.03.27 |
프로그래머스 : 기능개발 (0) | 2020.03.27 |
프로그래머스 : 모의고사 (0) | 2020.03.27 |
프로그래머스 : 완주하지 못한 선수 (0) | 2020.03.27 |