[Programmers] 전화번호부
문제
문제 해결 전략
우선 python으로 문제를 해결한다면 훨씬 간편해질 것 같다는 생각은 python 유저라면 누구나 생각했을 것 같다. 하지만 나는 c++로 지금 문제를 해결하려고 하고 있기 때문에 좀 고민을 해봤다. 가장 짧을 문자열을 앞에 오게 정렬을 한 후에 정련된 값에 for loop을 한 번 돌려서 나를 제외한 뒤에 문자열과 내 문자열 길이 만큼 겹치는 것이 있으면 loop을 빠져나오게 한 번 짜보려고 한다.
코드1
실패한 코드...
#include <string>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
bool solution(vector<string> phone_book) {
bool answer = true;
sort(phone_book.begin(), phone_book.end());
for(int i = 0;i < phone_book.size();i++){
for(int j = i+1;j < phone_book.size();j++){
if(i == j) break;
else if(phone_book[i].find(phone_book[j]) != 0) return false;
}
}
return answer;
}
우선 이렇게 짰을 때는 문제가 해결 되지 않았다.
코드2
#include <string>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
bool solution(vector<string> phone_book) {
bool answer = true;
int index = -1;
sort(phone_book.begin(), phone_book.end());
for(int i = 0;i < phone_book.size()-1;i++){
index = phone_book[i+1].find(phone_book[i]);
if(index >= 0) break;
}
if(index < 0) return answer;
else return false;
}
결국 다른 풀이 안보고 스스로 해결!!! 뿌듯하다. 우선 코드를 처음에 빠르게 짰을때는 우선 정렬부터 하고보자 하고 들어갔는데 생각을 해보니 사전순으로 정렬을 해준 후에 인접한 배열만 확인 하면 된다는 사실 을 깨우쳐서 바로 그대로 코드를 짜보았다. 문제를 풀면서 다른 사람들 코드를 확인해보니 나름 나도 나름 간결하게 짠 것 같다. 다른 사람 코드중에 내가 생각하지 못한 함수가 나와 한 번 정리해 보려고 한다.
substr
if(phone_book[i] == phone_book[i+1].substr(0, phone_book[i].size))
대충 코드를 살펴보니 substr함수는 앞에 벡터 문자열의 부분 문자열로 크기가 phone_book[i] 사이즈의 부분 문자열과 phone_book[i]가 일치하는지 확인하는 방식으로 해결한 것 같다.
Author And Source
이 문제에 관하여([Programmers] 전화번호부), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@easttwave/Programmers저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)