코딩테스트
[프로그래머스] 전화번호 목록 (JS)
여유로운 프론트엔드 개발자
2024. 8. 30. 21:47
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
(1) sort() 정렬 -> 문자열로 변환된 후 유니코드 순서로 정렬되기 때문에 비교 대상의 오른쪽 값만 비교하면 된다. 오른쪽 숫자가 본인의 숫자를 접두어로 갖지 못하면 다른 숫자들도 가질 수 없다.
(2) 본인을 포함하고 있는지 여부는 startsWith 메서드를 사용한다.
(3) 접두어를 갖는 값이 발견되면 break문으로 빠져나온다.
function solution(phone_book) {
let answer = true;
phone_book.sort();
for(let i = 0; i < phone_book.length-1; i++) {
for(let j = i+1; j < i+2; j++) {
if(phone_book[j].startsWith(phone_book[i])) {
answer = false;
break;
}
}
if(!answer) break;
}
return answer;
}
결론
처음에는 모든 숫자를 비교하려 했고 시간 초과가 날까봐 걱정했다.
유니코드 순서로 정렬하여 오른쪽 값만 비교하면 됐기 때문에 시간을 줄일 수 있었다.