2021 03 04 이전 정답코드
* 이 문제를 풀 때, 주의해야 하는 점은
"어떤 번호가 다른 번호의 접두어인 경우"라는 것입니다.
즉 테스트 케이스가 ["12388", "88"]인 경우는 접두사인 경우가 없어 답은 true가 됩니다.
* 문제를 풀 때, string STL의 find( )함수를 사용했습니다.
find함수는 인덱스 0부터 일치하는 문자를 찾습니다.
해당 일치하는 문자가 있을 경우, 시작 인덱스를 출력합니다.
...효율성 테스트 통과 X 코드
#include <string>
#include <vector>
using namespace std;
bool solution(vector<string> phone_book) {
bool answer = true;
string tempfront = "";
for(int i = 0; i < phone_book.size(); i++){
tempfront = phone_book[i];
for(int j = 0; j < phone_book.size(); j++){
if(i != j){
if(phone_book[j].find(tempfront) == 0){
answer = false;
break;
}
}
}
}
return answer;
}
왜 안 될까.. 하다가 if문을 한 줄로 만들고, 출력을 바로 return했더니 효율성 테스트에서 통과했다.
아래는 정답코드....
는 더 이상 정답이 아니게 됨..ㅠㅠ 3월 4일 이후로 효율성 테스트 2문제가 추가된 듯 하다.
테케가 변경되면 문제 푼 사람들에 한 해서 이메일이나 알림이 왔음 좋겠다.
이전에 정답이었던 내 코드가.. 더 이상 테케를 통과하지 않는 코드가 되었다.
그래서 다른 사람의 풀이를 참고하여 정답 코드로 올린다.
🌱 정답코드
풀이방법 1
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
bool solution(vector<string> phoneBook) {
bool answer = true;
sort(phoneBook.begin(), phoneBook.end()); // 사전 순 정렬
for ( int i = 0 ; i < phoneBook.size() - 1 ; i++ )
{
if ( phoneBook[i] == phoneBook[i+1].substr(0, phoneBook[i].size()) )
{
answer = false;
break;
}
}
return answer;
}
// 출처 : https://programmers.co.kr/learn/courses/30/lessons/42577/solution_groups?language=cpp
풀이방법 2
#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;
//map.insert({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;
}
// 출처 : https://programmers.co.kr/learn/courses/30/lessons/42577/solution_groups?language=cpp
cout << phone_book[ i ] -->> 119 cout << phone_book[ i ][ j ] << ' ' << phone_number << endl |
→ |
++) 추가.
이 문제유형은 해시였구나...
풀이 방식은 여기
나는 언제 문제만 보고, 아 이건 00유형이구나! 라고 생각할까...
아직 갈 길이 머네...ㅠㅠㅠ.. 내일 아침에 일어나서 hash로 다시 참고해봐야겠다.
#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;
}
Level 2 skill check
아놔..;
Level 2 skill check에서 다시 만났는데,
효율성 테스트 3, 4 통과 못 했다..ㅎ
(+ 이전에는 통과했는데 3/4일에 테케가 추가되었다고 한당.)
아마 해시로 안 풀어서 그런 것 같다... for문을 두 번 썼으니 머.. 말 다 했징...
다른 사람의 풀이 1 )
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
bool solution(vector<string> phoneBook) {
bool answer = true;
sort(phoneBook.begin(), phoneBook.end()); // 사전 순 정렬
for ( int i = 0 ; i < phoneBook.size() - 1 ; i++ )
{
if ( phoneBook[i] == phoneBook[i+1].substr(0, phoneBook[i].size()) )
{
answer = false;
break;
}
}
return answer;
}
// 출처 : https://programmers.co.kr/learn/courses/30/lessons/42577/solution_groups?language=cpp
그런데 다른 사용자들은 substr 보다 find가 이론적으론 빠르다고 하네요 라고 한다.
암튼 두 개의 풀이 모두 최근 변경된 테케도 통과한다.
다른 사람의 풀이 2 )
#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;
}
// 출처 : https://programmers.co.kr/learn/courses/30/lessons/42577/solution_groups?language=cpp
'OLD_알고리즘 > Programmers - 알고리즘' 카테고리의 다른 글
Programmers ] Lv.2 피보나치수 (0) | 2021.05.21 |
---|---|
Programmers ] Level 2 - 더 맵게 (0) | 2021.03.23 |
Programmers ] Level 2 - 가장 큰 수 (0) | 2021.03.04 |
Programmers ] Level 1 - K번째 수 (0) | 2021.03.04 |
Programmers ] Level 2 - H-Index (0) | 2021.03.04 |
댓글