알고리즘 공부/프로그래머스

(Java)프로그래머스 코딩테스트 연습 - 해시 - 전화번호 목록

HRuler 2020. 10. 21. 10:27

1. 문제

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

 

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

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

programmers.co.kr

2. 나의 풀이

import java.util.HashMap;
class Solution {
    public boolean solution(String[] phone_book) {
        /*
    	//phone_book 배열 중 가장 짧은 문자열 길이를 저장할 변수
    	int phonenum_length = 21;
    	
    	//phone_book 배열 중 가장 짧은 문자열 길이를 찾아 phonenum_length 변수에 저장
    	for(int i = 0; i < phone_book.length; i = i + 1) {
    		if(phonenum_length > phone_book[i].length()) {
    			phonenum_length = phone_book[i].length();
    		}
    	}
    	
    	//System.out.println(phonenum_length);
    	
    	//phone_book 배열의 모든 문자열을 phonenum_length 길이로 변환
    	for(int i = 0; i < phone_book.length; i = i + 1) {
    		phone_book[i] = phone_book[i].substring(0, phonenum_length);
    	}
    	
    	//System.out.println(Arrays.toString(phone_book));
    	 * 
    	 */
    	
    	//변환된 배열 중 같은 문자열이 있는지 확인하고 있는 경우 false를 return
    	for(int i = 0; i < phone_book.length; i = i + 1) {
    		int phonenum_length = phone_book[i].length();
    		for(int j = 0; j < phone_book.length; j = j + 1) {
    			if(i == j) {
    				continue;
    			}
    			try {
    				if(phone_book[i].equals(phone_book[j].substring(0, phonenum_length))) {
    					return false;
    				}
    			}catch(Exception e) {
    				continue;
    			}
    		}
    	}
    	
    	return true;
    }
}

3. 다른 사람 풀이

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