ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [알고리즘] #전화번호 목록
    ■ Algorithm 2019. 4. 16. 23:25

    출처: https://programmers.co.kr/learn/courses/30/lessons/42577?language=java

     

    알고리즘 연습 - 전화번호 목록 | 프로그래머스

    실행 결과가 여기에 표시됩니다.

    programmers.co.kr

     

    문제 설명

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

    • 구조대 : 119
    • 박준영 : 97 674 223
    • 지영석 : 11 9552 4421

    전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.

    제한 사항

    • phone_book의 길이는 1 이상 1,000,000 이하입니다.
    • 각 전화번호의 길이는 1 이상 20 이하입니다.

    입출력 예제

    phone_bookreturn

    [119, 97674223, 1195524421] false
    [123,456,789] true
    [12,123,1235,567,88] false

    입출력 예 설명

    입출력 예 #1
    앞에서 설명한 예와 같습니다.

    입출력 예 #2
    한 번호가 다른 번호의 접두사인 경우가 없으므로, 답은 true입니다.

    입출력 예 #3
    첫 번째 전화번호, “12”가 두 번째 전화번호 “123”의 접두사입니다. 따라서 답은 false입니다.

     

     

     

     


    #1. for문을 이용해 한개씩 비교하는 방법

    단순무식하게 처음부터 하나씩 비교하는 방법으로 풀어보았다.

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

    >>>> 정확성 8개 중 2개 실패, 효율성 성공! 정확도에서 틀렸을까??왜???

    여기서 나는 문제를 제대로 읽지 않는 실수를 했다. '접두어'인 경우에만 체크를 해줘야하는데, contains()를 써서 문자열 안에 포함되어 있는 경우로 풀었기 때문에 정확성에서 실패가 발생했다.

     

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

    >>>> contains 대신 startsWith 로 바꾸었더니 모두 성공했다!

     

    정확성 테스트

    테스트 1 통과 (0.98ms, 45.2MB)
    테스트 2 통과 (0.92ms, 47.4MB)
    테스트 3 통과 (1.03ms, 44.7MB)
    테스트 4 통과 (0.94ms, 47.6MB)
    테스트 5 통과 (0.96ms, 45.3MB)
    테스트 6 통과 (1.04ms, 48.2MB)
    테스트 7 통과 (0.94ms, 47.8MB)
    테스트 8 통과 (0.97ms, 48.3MB)

    효율성 테스트

    테스트 1 통과 (1.04ms, 54MB)
    테스트 2 통과 (1.10ms, 54.4MB)

     

    '■ Algorithm' 카테고리의 다른 글

    [알고리즘] #Validate Binary Search Tree  (0) 2019.04.18
    [알고리즘] #Same Tree  (0) 2019.04.18
    [알고리즘] #Add Two Numbers  (0) 2019.04.18
    [알고리즘] #Two Sum  (0) 2019.04.17
    [알고리즘] #완주하지 못한 선수  (0) 2019.04.16
Designed by Tistory.