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

박신희·2022년 4월 9일
0
post-thumbnail

❗ 풀이 과정 1

맨 처음에는 하나를 기준으로 잡고 그 나머지를 다 비교를 해야되나 싶었지만,
접두사는 맨 앞을 보는거니까 비교를 할때, 길이가 작은 순서대로 정렬을 한다면 앞을 기준으로 잡고 그 뒤에 비교를 해도 된다는 말씀!
그래서 직관적으로 짰을 때 효율성 테스트 3,4에서 시간초과가 떴다.

🤜 풀이 코드 (효율성 3,4 통과 X)

def solution(phone_book):
    phone_book.sort(key=lambda x:len(x))
    for i in range(len(phone_book)):
        tmp=phone_book[i]
        for p in phone_book[i+1:]:
            if tmp==p[:len(tmp)]:
                return False
    return True

❗ 풀이 과정 2

for문이 2개인 게 효율성에 걸리나 싶어서 for문을 하나로 줄이려던 차에
먼저, 문자열을 정렬한 다음에 길이가 작은 순으로 정렬을 한다면 앞이 비슷한 것들끼리 인접해지고 그 다음에 길이가 작은 순으로 정렬하는 거니까 인접한것만 비교하면 된다.
따라서 for문 1개로 줄일 수 있다.

ex.
["119", "97674223", "1195524421"] --정렬--> ["119", "1195524421", "97674223"]

🤜 풀이 코드 (모두 통과)

def solution(phone_book):
    phone_book.sort(key=lambda x:(x,len(x)))
    for i in range(len(phone_book)-1):
        tmp=phone_book[i]
        if tmp==phone_book[i+1][:len(tmp)]:
                return False
    return True
profile
log my moments 'u')/

0개의 댓글