01-31 00:40
Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
관리 메뉴

기록을 합시다.

[프로그래머스] 전화번호 목록(python/java) 본문

공부/알고리즘

[프로그래머스] 전화번호 목록(python/java)

울집고양이세마리 2023. 6. 22. 00:38

문제 요약

  • 임의의 전화번호가 다른 전화번호의 앞자리와 같으면 false를 반환, 그렇지 않다면 true를 반환해준다.

파이썬으로 제출한 정답

def solution(phone_book):
    for i in range(len(phone_book)-1):
        for j in range(i+1, len(phone_book)):
            if len(phone_book[i]) < len(phone_book[j]):
                #접두사가 하나라도 있으면 False
                if phone_book[j].startswith(phone_book[i]):
                    return False
            elif len(phone_book[i]) > len(phone_book[j]):
                #접두사가 하나라도 있으면 False
                if phone_book[i].startswith(phone_book[j]):
                    return False
    #찾아봤는데 접두사가 없는 경우 
    return True 

내가 생각한 로직(파이썬)

  • 솔직히 이거 옛날에 푼 건데 보고 깜짝 놀랐다.. (너무 구려서)
  • 각설하고, 일단은 두 전화번호를 비교하고, 그 둘이 서로의 전화번호로 시작하는지 확인해주었다.

자바로 제출한 정답

import java.util.*;

class Solution {
    public boolean solution(String[] phone_book) {
        List<String> phoneBook = Arrays.asList(phone_book);
        Collections.sort(phoneBook);

        for(int i = 0; i < phoneBook.size()-1 ; i++){
            String phoneNum1 = phone_book[i];
            String phoneNum2 = phone_book[i+1];
            if(phoneNum2.startsWith(phoneNum1)){
                return false;
            }
        }
        return true;
    }
}

내가 생각한 로직(자바)

  • 일단은 전부 sort 처리해주면, 길이+아스키코드 순으로 정렬해주기 때문에 서로 앞자리가 똑같거나 비슷한 문자열이 모이게 된다.
  • 그러면 그 다음 전화번호부는 서로 앞자리들이 똑같고, 길이가 그 다음에는 무조건 길다는 것이 보장되기 때문에 for문을 한 번만 사용해서 startsWith 메서드를 이용해 비교해주었다.
Comments