본문 바로가기
Java/알고리즘

전화번호 목록

by 티코딩 2023. 6. 7.

ㅇ 문제설명

문제를 보고 아ㅋㅋ 개쉽네ㅋㅋ 이랬다가 바로 효율성 테스트 실패!

내가 처음 푼 방법은 이중 반복문을 사용해, 자바의 String의 stratswith() 메서드를 사용했다.

그게 패착요인일줄은...사실 어느정도 예상했다.

ㅇ 내가 처음 푼 방법

class Solution {
    public boolean solution(String[] phone_book) {
        for(int i = 0; i < phone_book.length; i++){
            for(int j = 0; j < phone_book.length; j++){
                if(i == j){
                    continue;
                }
                if(phone_book[i].startsWith(phone_book[j])){
                    return false;
                }
            }
        }
        return true;
    }
}

이렇게 풀었다가 반복문을 하나만 써야할거같아서, 생각을 해보다가 sort한뒤 앞뒤로만 비교하면 될거같아서 바로 수정했다.

내 예상이 맞았다.

ㅇ 수정한 코드

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

훨씬 간결해졌다.

phone_book은 문자열배열이지만 전화번호 목록이기 때문에 숫자로만 이뤄져있다.

String[] book2 = {"119", "97674223", "1195524421","960231123", "1283839", "10094", "44345"};

book2가 이렇게 이뤄질때, Arrays.sort를 사용하면 

[10094, 119, 1195524421, 1283839, 44345, 960231123, 97674223]

이렇게 나온다. 앞자리 비교하고, 다음자리 비교하교...계속 이런식이라 지금 문제에 사용하기 매우 좋다.

 

'Java > 알고리즘' 카테고리의 다른 글

영어 끝말잇기  (0) 2023.10.11
올바른 괄호  (0) 2023.10.11
할인행사  (0) 2023.05.26
캐시 - LRU(Least Recently Used)  (0) 2023.05.16
올바른 괄호  (0) 2023.04.20