본문 바로가기

컴퓨터/프로그래머스

프로그래머스 - 42577번: 전화번호 목록 [Java]

문제: https://school.programmers.co.kr/learn/courses/30/lessons/42577

 

프로그래머스

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

programmers.co.kr

1. 코드

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

2. 설명

문자열 배열을 정렬하게 되면 길이가 아닌 문자열의 왼쪽 부분부터 비교를 진행하며 해당 문제에서는 문자 중 숫자만 입력이 진행되기에 숫자의 순서로 오름차순으로 정렬하게 됩니다. 예를 들어 [ "119", "97674223", "1195524421"] 배열이 존재하며 정렬하게 되면 [ "119", "1195524421", "97674223"]이렇게 정렬되기에 반복문을 통해 쉽게 시작하는 문자열인지 확인 가능하다.

해시를 사용한 문제라고 명시되어 있는데 정확히 어떻게 확인하는지 모르겠다.

3. 정리

  1. 문자열 정렬의 성질을 이용할 수 있다.
  2. String.startsWith() 메서드는 Parameter로 해당 문자열이 시작되면 true 아니면 false를 반환
출처: 프로그래머스 코딩 테스트 연습, 
https://school.programmers.co.kr/learn/challenges