본문 바로가기

공부/코딩테스트

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

728x90

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

 

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

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

programmers.co.kr

 

오늘의 코드 리뷰는 프로그래머스 전화번호 목록

 

전화번호목록중 어떤 번호가 다른 번호의 접두어인경우를 체크하는문제

 

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

일단 처음엔 단순하게 그 글자로 시작하는 문자열이있는지 이중포문으로 찾았는데

 

테스트케이스는 모두 통과했으나 효율성에서 On제곱이 나와버리니 통과를 못한듯하다

 

그래서 찾으면 바로 리턴하도록 변경했으나 역시... 효율성 두개 통과못햇...ㅋ

 

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+1].startsWith(phone_book[i]))
                return false;
        }
        return answer;
    }
}

다른 분의 코드를 참고하여 해결했는데.......

여기서 이해안되는 부분이

 

if문 비교에서 저렇게 코드를 짜면 0번방하고 1번방, 1번방하고 2번방, 이런식으로만 비교가 되는거아닌가...?

 

나는 i번방을 i+1번방부터 마지막방까지 써치하고싶은데...?

 

해결했지만 어떻게 풀린건지 이해하기힘든 코드다