반응형
- 문제
주어진 전화번호가 다른 전화번호의 접두어인 경우 false를 아니면 true를 반환하는 문제이다.
특이하게 해시로 풀어야 하는 문제에 속한다.
- 풀이
#include <string>
#include <vector>
#include <algorithm>
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() - 1; i++){
if(phone_book[i] == phone_book[i+1].substr(0,phone_book[i].size()))
return false;
}
return answer;
}
sort를 해서 사전순으로 정렬했으니 다음 전화번호랑만 비교하면 된다.
근데 해시를 이용해서 풀어야 하는 문젠데, 아무리 생각해도 해시로 어떻게 풀어야 할 지 모르겠어서 다른 사람꺼를 참고해봐야겠다.
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
bool solution(vector<string> phone_book) {
bool answer = true;
unordered_map<string, int> hash_map;
for(int i = 0; i < phone_book.size(); i++)
hash_map[phone_book[i]] = 1;
for(int i = 0; i < phone_book.size(); i++) {
string phone_number = "";
for(int j = 0; j < phone_book[i].size(); j++) {
phone_number += phone_book[i][j];
if(hash_map[phone_number] && phone_number != phone_book[i])
answer = false;
}
}
return answer;
}
해시로 하나하나 모두 만든 다음에 반복문을 이중으로 돌려서 하라는 문제였던 것 같은데, 그렇게 좋아 보이지는 않는다.
- 기억할 것!
X
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
프로그래머스 짝지어 제거하기 C++ (0) | 2022.10.13 |
---|---|
프로그래머스 영어 끝말잇기 C++ (0) | 2022.10.13 |
프로그래머스 최댓값과 최솟값 C++ (0) | 2022.10.11 |
프로그래머스 JadenCase 문자열 만들기 C++ (0) | 2022.10.11 |
프로그래머스 숫자 짝꿍 C++ (0) | 2022.10.06 |