본문 바로가기
Algorithm

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

by 걸어가는 신사 2021. 10. 15.

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<String, Integer> map = new HashMap<>();
        for (int i = 0; i <phone_book.length; i++) {
            map.put(phone_book[i], i);
        }
        for (int i = 0; i < phone_book.length; i++) {
            for (int j = 1; j < phone_book[i].length(); j++) {
                if(map.containsKey(phone_book[i].substring(0,j))) {
                    answer = false;
                }
            }
        }
        return answer;
    }
}

(i) HashMap 사용

  • phone_book 배열에 있는 문자열을 HashMap key로 넣는다.
  • map.containKey()를 이용해서 순서대로 문자열 하나씩 비교한다.
반응형

'Algorithm' 카테고리의 다른 글

[Algorithm] 정렬 (Sort)  (0) 2022.01.22
[BOJ] 15663번: N과 M (9) (JAVA)  (0) 2022.01.22
[Algorithm] 백트래킹 (Backtracking)  (0) 2022.01.21
[Algorithm] 완전탐색 (BruteForce)  (0) 2022.01.21
Greedy Algorithm (그리디 알고리즘)  (0) 2021.11.05

댓글