본문 바로가기

CodingTEST

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

반응형

프로그래머스 - [Level 2]  전화번호 목록

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제 분석
  •  
  • 전화번호부가 주어진다.
  • 전화번호부 중에서 하나의 번호가 다른 번호의 접두사인 경우가 있는지 확인한다.
    • 구조대 : 119
      박준영 : 97 674 223
      지영석 : 11 9552 4421
    • 이 때, 지영석 번호의 접두사가 구조대 번호이므로 존재하는걸로 판단.
  • 있을 경우 false, 아닐 경우 true를 리턴한다.

해결 키 포인트

 

  • 문자열 정렬로 구현
  • 문자열 배열을 내림차순으로 정렬
    •  Arrays.sort(phone_book, Collections.reverseOrder());
    • 문자열 정렬이므로, 숫자 정렬이 아니라 비슷한 문자열이 근처에 되도록 정렬된다.
      예를 들어, 119, 120, 11920202 이 존재할 때 문자열 정렬하면 120, 11920202, 119 로 정렬된다.
  • 내림차순으로 정렬했으니, 현재 문자열의 앞부분이 다음 인덱스에 문자열과 동일한지 비교
    • 1번 방법 : 문자열 앞에 부분을 다음 인덱스 길이만큼 자른 후(substring) 동일한지 여부 확인 (equals)
    • 2번 방법 : 문자열이 다음 문자열로 시작하는지 여부 확인 (startWith)
// 1번 방법
phone_book[i].substring(0, phone_book[i+1].length()).equals(phone_book[i+1]);

// 2번 방법
phone_book[i].startsWith(phone_book[i+1];

 

 

  • 추가적인 해결 방법 : 해시 맵 사용

 


코드

 

import java.util.Arrays;
import java.util.Collections;

class Solution {
    public boolean solution(String[] phone_book) {
        Arrays.sort(phone_book, Collections.reverseOrder());

        for (int i = 0; i < phone_book.length-1; i++) {
            if (phone_book[i].startsWith(phone_book[i+1]))
                return false;
        }

        return true;
    }
}

 

반응형

'CodingTEST' 카테고리의 다른 글

[백준 1149] RGB거리 (JAVA)  (0) 2024.01.14
[백준 16953] A → B (JAVA)  (0) 2024.01.14
[백준 11725] 트리의 부모 찾기(JAVA)  (0) 2024.01.12
[백준 14500] 테트로미노(JAVA)  (1) 2024.01.06
[백준 9019] DSLR (JAVA)  (1) 2024.01.06