728x90


📌  풀이

zip() 내장 함수

zip() 함수는 여러 개의 순회 가능한(iterable) 객체를 인자로 받고, 각 객체가 담고 있는 원소를 튜플의 형태로 차례로 접근할 수 있는 반복자(iterator)를 반환한다.

numbers = [1, 2, 3]
letters = ["A", "B", "C"]
for pair in zip(numbers, letters):
     print(pair)
...
(1, 'A')
(2, 'B')
(3, 'C')

위 코드를 보면 numbers 리스트와 letters 리스트를 zip() 함수에 인자로 넘겨서 호출 후에, for 문으로 zip() 함수의 반환값을 대상으로 루프를 돌면서 터플을 차례로 출력하고 있다.

 

zip() 함수를 활용하면 여러 그룹의 데이터를 루프를 한 번만 돌면서 처리할 수 있다. 가변 인자를 받기 때문에 2개 이상의 인자를 넘겨서 병렬 처리가 가능하다.

for number, upper, lower in zip("12345", "ABCDE", "abcde"):
     print(number, upper, lower)
...
1 A a
2 B b
3 C c
4 D d
5 E e

 

startswith() 내장 함수

startswith는 문자열이 특정 문자로 시작하는지 여부를 알려준다. 

반환 값으로는 true나 false 즉 boolean 타입을 반환한다.

# 예시 1
string = "hello startswith"
print(string.startswith("hello"))
...
True

# 예시 2
string = "hello startswith"
print(string.startswith("Hello"))
...
False

 

문제에서는 어떤 번호가 다른 번호의 접두어인 경우를 찾아야 하므로 우선 전화번호부 리스트를 정렬한다. 

 

정렬하는 이유는

for문과 zip 함수를 이용해 연속한 두 번호의 접두어 유무를 비교해야 하는데

만약 phone_book = ["119", "97674223", "1195524421"]인 경우에는 정렬을 하지 않으면 

"119", "97674223"

"97674223", "1195524421"

순서대로 비교를 하게 되므로 제대로 된 결과가 나오지 않는다.

 

제대로 된 결과를 위해서는 phone_book 을 정렬해 

"119", "1195524421" 를 연속하게 두어 비교해야 한다.

 

코드

def solution(phone_book):
    phone_book.sort()
    for a, b in zip(phone_book, phone_book[1:]):
        if b.startswith(a):
            return False
    return True

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Reference:

https://www.daleseo.com/python-zip/

https://ooyoung.tistory.com/60

https://dpdpwl.tistory.com/119

 

복사했습니다!