[프로그래머스] 전화번호 목록 (JAVA)

[프로그래머스] 전화번호 목록 (JAVA)

1. 문제 설명

전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다.

전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.

구조대 : 119

박준영 : 97 674 223

지영석 : 11 9552 4421

전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.

2. 문제 풀이

(1) 정렬 후 String 클래스 Method를 이용한 풀이

import java.util.Arrays; import java.util.Collections; class Solution { public boolean solution(String[] phone_book) { boolean answer = true; Arrays.sort(phone_book, Collections.reverseOrder()); for (int i = 0; i < phone_book.length-1; i++) { if(phone_book[i].indexOf(phone_book[i+1]) == 0) { answer = false; } } return answer; } }

(i) 정렬

정렬을 이용하면 앞의 문자와 뒤의 문자의 비교만으로 문제를 풀 수 있다. 이중 Loof를 사용하지 않아도 된다.

오름차순으로 정렬시 phone_book[i]보다 phone_book[i+1] 문자열이 더 크므로 포함하지 않는다. ex) "12" "123456"

내림차순으로 정렬 해준다.

(ii) String Collection Method

String Collection Method들 중 사용가능하겠다고 떠오른 처음 떠오른 Method는 String.contains() contains() method는 문자중에 포함만 된다면 true를 반환하기 때문에 접두사라는 조건을 만족하지 않는다. 13번 테스트케이스에서 실패가 뜬다.

다음 사용 Method는 String.indexOf() indexOf()는 특정 문자나 문자열이 앞에서부터 처음 발견되는 index를 반환 한다. 찾지 못했을 경우 "-1" 반환 즉, index가 0이 return 되어야 접두사라는 조건을 만족한 것이다.

(2) HashMap을 사용한 풀이

import java.util.HashMap; import java.util.Map; class Solution { public boolean solution(String[] phone_book) { boolean answer = true; Map map = new HashMap<>(); for (int i = 0; i

(i) HashMap 사용

phone_book 배열에 있는 문자열을 HashMap key로 넣는다.

map.containKey()를 이용해서 순서대로 문자열 하나씩 비교한다.

from http://choiyeonho903.tistory.com/48 by ccl(A) rewrite - 2021-10-15 02:01:28