어제의 나보다 성장한 오늘의 나

[프로그래머스][Level2][Java] 전화번호 목록 본문

알고리즘/프로그래머스(Programmers)

[프로그래머스][Level2][Java] 전화번호 목록

NineOne 2020. 12. 23. 22:34

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

 

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

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

programmers.co.kr

문제풀이

매번 말하는 거지만 문제를 잘 읽어야한다! ㅠㅠ "접두사"의 정확한 사전적 의미를 알지 않고 포함되어 있으면

되겠지 생각하고 contains함수를 써서 풀었다.

하지만 접두사란? -> "어떤 단어의 앞에 붙어 새로운 단어가 되게 하는 말" 그러므로 contains함수로 풀면 안되고

앞에 붙는 숫자가 같은것끼리 찾으면 되는 문제였다.

그래서 배열의 길이에 따라 정렬하였고 접두사 검사를 하고 list에 담아주었다.

길이로 정렬하였기 때문에 비교 할려는 phone_book[i]의 길이가 담겨져 있는 list의 길이보다 크기 떄문에 

subString으로 짤라줘 비교 하였다.

 

코드

import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;

class Solution {
    public boolean solution(String[] phone_book) {
        boolean answer = true;
        
        List<String> list = new ArrayList<>();
        
        Arrays.sort(phone_book, new phoneLengthCompare());
        
        for(int i=0; i<phone_book.length; i++){
            
            for(int j=0; j<list.size(); j++){
                String a = list.get(j);
                String b = phone_book[i].substring(0,a.length());
                if(a.equals(b)) return false;
            }
                
            list.add(phone_book[i]);
        }
        
        return answer;
    }
	
	 static class phoneLengthCompare implements Comparator<String>{

		@Override
		public int compare(String o1, String o2) {
			return o1.length() > o2.length() ? 1 : o1.length() < o2.length() ? -1:0;
		}
	 }
}
Comments