문제 URL
https://programmers.co.kr/learn/courses/30/lessons/42577
문제 요구사항
문제 풀이 (git 링크)
https://github.com/JoyDaheeCha/AlgorithmTest
코드 설명
package phoneBook;
import java.util.Arrays;
public class PhoneBook {
// 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return
public boolean solution(String[] phone_book) {
Arrays.sort(phone_book);
for (int i = 0; i < phone_book.length-1; i++) {
if (phone_book[i+1].startsWith(phone_book[i])){
return false;
}
}
return true;
}
}
phone_book 어레이에서 n번째 아이템이 n+1번째 아이템의 접두사임을 for문을 통해 확인하고자 한다.
1. 문자열 순서대로 정렬.
- 짧은 문자에서 긴 문자 순서로 정렬 한다.
- 이유:
{1231, 123, 18434}의 경우 123이 1231보다 뒤에 위치한다. 123이 앞에 와야 1231에 포함되는지 알 수 있다.
2. for문+ startsWith을 사용해서 접두사 여부 찾기
궁금증
본 문제는 해시에 관한 문제다. 해시를 사용해서 푼 케이스를 봤지만, 왜 해시를 사용하는지 잘 이해가 가질 않는다..
(혹시 이유를 아실 경우 댓글로 알려주시면 감사하겠습니다! )
나중에 깨달으면 포스팅을 수정할 계획이다.