Java
[프로그래머스] 전화번호 목록
hunbal
2023. 10. 23. 15:42
SMALL
문제 설명 및 예시
주어진 배열의 원소가 다른 원소의 접두어인 경우를 판단하는 함수를 구현하는 문제이다.
풀이
접두어를 판단하는 startWith() 메서드와 HashMap을 사용하는 두 가지 풀이법으로 문제를 해결했다.
우선 startWith() 메서드를 사용한 풀이이다.
1. 효율적인 비교를 위해 배열을 길이 순으로 정렬한다.
2. 반복문으로 현재 전화번호와 그 다음 전화번호를 비교한다. (마지막 전화번호는 비교할 필요 없음)
3. *startWith() 메서드로 접두어가 존재하면 false, 그렇지 않으면 true를 반환한다.
startWith()와 contains() 메서드는 유사한 것처럼 보이지만 중요한 차이점이 존재한다.
A.startWith(B) : A의 접두어가 B인지 판단하는 함수.
A.contains(B) : A 안에 B가 포함되는지 판단하는 함수.
문제에서 접두어 여부를 요구했으므로 contatins() 메서드를 사용할 시 오답이 될 수 있다.
테스트를 통과했고, HashMap을 활용하여 다른 방식으로 풀어보기로 하였다.
1. 배열을 길이 순으로 정렬한다.
2. 접두어를 저장할 HashMap을 생성한다.
3. for문으로 전화번호 배열의 각 원소를 문자로 나눠 접두어로 HashMap에 저장한다.
4. 현재 전화번호가 HashMap에 저장된 접두어일 시 false를 반환한다.
5. 중복된 접두어가 없을 시 true를 반환한다.
무난하게 풀이를 완료하였다.
유사하지만 접두어 여부에 따라 다른 결과를 반환하는 startWith() 메서드와 contains() 메서드, HashMap에 대한 이해가 필요한 문제였다.