2026.3.27.
https://school.programmers.co.kr/learn/courses/30/lessons/42577
function solution(phone_book) {
const sorted = phone_book.sort();
for (let i = 0; i < sorted.length; i++) {
if (i === sorted.length -1 ) return true;
if (sorted[i].length < sorted[i + 1].length) {
if (sorted[i + 1].startsWith(sorted[i])) {
return false;
} else continue;
} else {
if (sorted[i].startsWith(sorted[i + 1])) {
return false;
} else continue;
}
}
}
function solution(phoneBook) {
const sorted = phoneBook.sort();
for (let i = 0; i < sorted.length - 1; i++) {
if (sorted[i + 1].startsWith(sorted[i])) {
return false;
}
}
return true;
}
continue를 넣었었는데, 지금 코드에선 어차피 루프 내 코드의 마지막 줄이라 건너뛰고 다음 루프로 넘어가라고 따로 지시할 필요 없음! 어차피 그렇게 동작할 것이기 때문.sort로 정렬하면 길이도 작은순으로 정렬돼서 sorted[i]와 sorted[i+1]의 길이를 비교할 필요가 없음. 먼저 놓인 요소가 항상 뒤에 놓인 요소보다 길이가 짧을 것으로 가정해도 무방함.sorted.length -1 까지 반복문을 돌리면 얼리 리턴 코드가 없어도 동일하게 동작함해시가 뭐지? 어떻게 활용하라는 의도일까?
이 문제에서 해시를 적용하는 방향을 찾지 못함
배열, 문자열 메서드는 좀 아니까 고민하다보니 풀렸음
정렬할 때 길이를 먼저 비교해야 할까, 알파벳을 먼저 비교해야 할까 고민했는데, 그럴 필요 없었던 게 sort는 내부적으로 둘 다 비교해서 정렬함.
sort() 기본 정렬: 사전순 정렬 - 문자 하나씩 앞에서부터 비교 & 길이가 짧은 게 앞에 놓임
sort() 메서드, 문자열 includes(), startsWith() 메서드sort만 사용함includes를 쓰려 했는데 (지난번 for ... in, for ... of처럼 계속 Dart랑 JavaScript 중에 다트 문법이 먼저 생각나는 이슈로 contains부터 떠올리긴 함) 좀더 생각해보니 어디에든 포함하는 걸 체크하는 게 아니라 '접두'어인지 체크하는 거라서, startsWith && 정렬을 떠올림for i < length - 1 + startsWith 패턴 사용sort() 기본 정렬은 사전순이어서 접두어 관계 체크엔 충분. 길이를 따로 비교할 필요 없음특이점. 힌트없이 풀었다!