ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] 전화번호 목록 - 해시
    알고리즘/문제풀기 2019. 4. 16. 18:34

     

    ◆ 나의 풀이

    compareTo 라는 문자열을 비교해 주는 함수를 만들어서 각 배열의 문자열들을 비교해 주도록 만들었다.

    while문 안에서 while(i<numbers.length() && k<compares.length()) 이렇게 되는 이유는 더 작은 길이까지만 비교해 주어도 괜찮기 때문이다. 

    아래의 주석 처럼 동작하면 테스트 통과가 된다!

    class Solution {
        private static boolean compareTo(String numbers, String compares) {
            int i=0;
            int k=0;
            while (i<numbers.length() && k<compares.length()) {		// 두 문자열보다 길이가 짧을 때까지
                if(numbers.charAt(i) != compares.charAt(k))
                    return false;		// 문자열이 다르면 false를 반환
                i++;
                k++;
            }
            return true;		// 문자열이 같으면 true를 반환
        }
        public boolean solution(String[] phone_book) {
            int pblength = phone_book.length;
            for(int i=0; i<pblength; i++) {
                for(int j=i+1; j<pblength; j++) {	// 이미 비교해 준 앞의 배열은 넣어줄 필요가 없어서 j=i+1로 시작해줌
                    String phone = phone_book[i];
                    String compare = phone_book[j];
                    if(compareTo(phone, compare))		// compareTo의 반환값이 true이면
                        return false;				// false를 반환
                }
            }
            return true;	// compareTo의 반환값이 false이면 true를 반환
        }
    }

     

     

     

     

    ◆ 모든 풀이

    더욱 간단한 코드가 있었는데 아래의 코드이다.

    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;}	
                    //phoneBook[i]이 phoneBook[j]로 시작 하면 false를 반환
                    if(phoneBook[j].startsWith(phoneBook[i])) {return false;}
                    //phoneBook[j]가 phoneBook[i]로 시작 하면 false를 반환
                }
            }
            return true;
        }
    }

    나는 startsWith라는 함수를 알지 못해서 사용하지 못했다.

     

    ▽startsWith()

    startsWith() 메소드는 문자열이 주어진 접두 표현을 가지고 시작하는지 확인 하는 함수입니다.

    만약 주어진 접두표현을 가지고 시작한다면 true를 반환하고, 아니라면 false를 반환합니다.

     

    하지만 위 문제에서는  같은 문자열이 있으면 false반환하라고 해서 if문으로 걸고 return을 해준 것 같습니다.

     

    댓글

Designed by Tistory.