전화번호 목록(python)

이민호·2021년 3월 7일

내 풀이 1

접두어인 리스트 phone_number의 [0]이 다른 요소에 포함되어 있는지 확인하기위해서 for 문을 이용하고, 조건문의 in을 이용하였다.

def solution(phone_book):
    answer = True
    for i in range(1,len(phone_book)):
        if phone_book[0] in phone_book[i] or phone_book[i] in phone_book[0] : 
            answer = False
            break
    return answer

정확성이 58%밖에 안된다. 실패....
또한 앞뒤로 일일히 비교해야 해서 효율성이 낮다.

내 풀이2

answer = True
a = [i for i in phone_book[0]]
for k in (1, len(phone_book)):
    count = 0
    b = [j for j in phone_book[k]]
    for x,y in zip(a,b):
        if x == y:
            count += 1
    if count == len(a):
        answer = False
        break

zip을 이용하여 글자 하나하나를 비교하려 하였으나 너무 복잡하고 b = [j for j in phone_book[k]] 부분에서 list out of range 오류가 난다...

결국 다른사람의 도움을 받았다.ㅜ

해설

1. zip이용

phone_book.sort()
answer = True
for x,y in zip(phone_book, phone_book[1:]):
    if x in y or y in x:
        answer = False
        break
return(answer)

sort()로 정렬을 하면 접두어를 기준으로 양 옆의 근처 숫자들을 확인해주면 되므로 zip를 이용하여 접두어가 들어가 있는지 아닌지 확인한다.

그러나 이방법을 써도 두개의 실패가 떳다? 엥

2. startswith이용

startswith를 이용하면 내가 찾고싶은 문자열이 찾는 대상의 문자열에 있는지 확인할 수 있다.

ex)
문자열 hello에서 hel 이 있는지 찾아본다.
str1 = hello
str1.startswith('hel') #True를 반환한다.
str1에 해당되는 문자열이 없으면 False를 반환한다.
str1.startswith('elo') #False

이 방법을 이용하여 문제에 적용한다.

phone_book.sort()
answer = True
for x,y in zip(phone_book, phone_book[1:]):
    if y.startswith(x):
        answer = False
        break
return(answer)

in을 이용하는것 보다 효율적이다.

profile
life is fun

0개의 댓글