문제
https://school.programmers.co.kr/learn/courses/30/lessons/42577
풀이
통과한 풀이
- sort()로 정렬을 하면 앞글자가 비슷한 것끼리 이웃에 위치하게 된다.
- ["119", "11923", "119763"] 처럼 아무리 접두어가 같은 게 여러 개 있어도 바로 인접한 요소가 자신을 접두어로 가진다면 return false를 하고 끝내면 되므로 i, i+1 만 비교하면 된다.
- for문을 돌려 i+1 범위가 넘치지 않게 phone_book.length -1 까지 검사하면서 [i + 1]이 [i]를 접두어로 가지는지 startsWith로 검사한다. 완전히 일치한다면 접두어가 아니게 되므로 일치하지 않는 것만 통과시킨다. 그리고 return false
- for문 돌아도 접두어가 없다면 마지막에 true 반환
function solution(phone_book) {
phone_book.sort();
for(let i = 0; i < phone_book.length - 1; i++) {
if(phone_book[i + 1].startsWith(phone_book[i]) && phone_book[i + 1] !== phone_book[i]) {
return false;
}
}
return true;
}
(오 근데 지금 보니 중복된 전화번호가 없다고 하니까 startsWith 검사할 때 완전히 같은지까지는 검사 안해도 되네
이거 참고하시는 분 있다면 저 부분 빼도 통과하는 거 확인했으니까 빼도 됩니다)
시간 효율성에서 통과 못한 풀이
- 이중 for문을 돌며 본인을 제외한 요소를 검사해서, startsWith()로 접두어 여부를 검사한다. 자신과 완전히 같은 경우는 접두어가 될 수 없으므로 제외한다. 접두어가 맞다면 false를 반환한다.
- 모든 요소를 검사했다면 접두어가 되는 것이 없으므로 true를 반환한다.
for(let i = 0; i < phone_book.length; i++) {
for(let k = 0; k < phone_book.length; k++) {
if(i === k) continue;
if (
phone_book[k].startsWith(phone_book[i]) &&
phone_book[i] !== phone_book[k]
)
return false;
}
return true;
'알고리즘 이론 & 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 Lv.1 | (완전탐색) 모의고사 js (0) | 2023.08.09 |
---|---|
프로그래머스 Lv.2 | (완전탐색) 소수찾기 js (0) | 2023.08.08 |
프로그래머스 Lv.1 | 완주하지 못한 선수 js (0) | 2023.08.08 |
프로그래머스 Lv.1 | 폰켓몬 js (0) | 2023.08.08 |
프로그래머스 Lv.0 | 영어가 싫어요 js (0) | 2023.08.06 |