프로그래머스 - 전화번호 목록
2022. 8. 9. 15:41ㆍ코딩 공부 연습
반응형
어허.. 오랜만에 레벨2를 풀었다.
맨첨에 시간을 신경쓰지않고 일단 푼다음에 시간을 줄여보자는 생각으로 2중for문을 갈겼다. 다 통과가 되는줄알았는데 효율성검사를 하는지 몰랐네.. 효율성 검사에서 틀렸다고 떴당ㅋㅋ
틀린코드는 다음과 같다.
#include <string>
#include <vector>
#include <iostream>
#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(); i++)
{
for(int j = 0; j < phone_book.size(); j++)
{
if (phone_book[j].find(phone_book[i]) == 0 && i != j)
return false;
}
}
return true;
}
사실 저거 전에 문자열의 길이가 더 긴 애를 짧은애와 비교할 필요가 없어서 sort를 저거로 안하고 따로 길이순으로 정렬하는걸 만들어서 비교하는 시간을 좀 더 줄여보려고 했다.
고치려고 생각을 하다 문자열 길이로 할게 아니라 그냥 정렬해서 알파벳 순으로만 정렬한다해도 원하는 대로 비교할 수 있다는 걸 알게 되었다. 그래서 그냥 stl sort로 정렬하고 비교를 find로 했다. 이거 strncmp 같은 거가 string 에 있는지 모르겠는데 사용법을..몰라서 그냥 Find 로 찾은 위치가 0 이면 첫번째에 접두사로 있다는 의미가 되니까 이렇게 찾았다..! 더 찾아봐야재
#include <string>
#include <vector>
#include <iostream>
#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+1].find(phone_book[i]) == 0)
return false;
}
return true;
}
이걸로 하면 효율성 검사도 통과한다! skrrrrkak
'코딩 공부 연습' 카테고리의 다른 글
프로그래머스 문자열을 정수로 바꾸기 (0) | 2022.08.09 |
---|---|
프로그래머스 정수 내림차순으로 배치하기 (0) | 2022.08.09 |
프로그래머스 두 정수 사이의 합 (0) | 2022.08.08 |
프로그래머스 수박수박수박수 (0) | 2022.08.08 |
프로그래머스 자연수 뒤집어 배열로 만들기 (0) | 2022.08.08 |