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

 

코딩테스트 연습 - 전화번호 목록

전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조

programmers.co.kr

 

문자열들의 집합으로 구성된 배열에서 하나의 문자열이 다른 문자열의 접두사가 되면 false, 그렇지 않으면 true 를 출력하는 문제입니다.

다만, 유의할 것은 배열의 길이가 최대 1000000개라서 for 루프는 2중으로 사용이 불가능하다는 것이다.

요약하자면 숫자로 구성된 문자열을 정렬한 다음, for 루프를 돌면서 해당 문자열이 다음 문자열의 접두사인지만 확인하면 되는 것이다.

문자열을 정렬할 경우, 사전순으로 정렬되기 때문에 이중 루프를 만들 필요가 없다는 것이 중요하다.

import java.util.*;
import java.util.stream.Collectors;
class Solution {
    public static boolean solution(String[] phone_book) {
        boolean answer = true;
        List<String> list = Arrays.stream(phone_book).sorted().collect(Collectors.toList());
        for (int i = 0; i < list.size(); i++) {
            if (i == list.size()-1) break;
            if (list.get(i+1).startsWith(list.get(i))) {
                return false;
            }
        }
        return answer;
    }

}

'코딩테스트' 카테고리의 다른 글

[프로그래머스] 베스트앨범  (0) 2022.03.30
[프로그래머스] 더 맵게  (0) 2022.03.29
[프로그래머스] 단어 변환  (0) 2022.03.29
[프로그래머스] H-index  (0) 2022.03.29
[프로그래머스] 가장큰수  (0) 2022.03.28

+ Recent posts