단순하게 생각하여 정렬된 전화번호들을 for 문을 통하여 각각으로 시작하는 부분이 있는지
.startswith로 검사하여 존재한다면 count를 증가시켜 count가 2 이상 일 때 False를 출력하고
그 외에는 True를 출력하도록 하였다.
이는 정확도 테스트는 통과 하였지만 효율성 테스트를 통과하지 못하였다.
두 번의 for 문으로 phone_book을 전부 돌아가기 때문에 실패한 것 같다.
def solution(phone_book):
phone_book.sort()
for numbers in phone_book:
count =0
for x in phone_book:
if x.startswith(numbers):
count+=1
if count >=2:
return False
return True
개념은 동일한데, zip을 사용하여 두 번의 for문을 적어주었던 것을 하나로 줄였다.
또한 p2는 phoneBook[1:]으로 반복문을 돌게 함으로 더욱 연산을 줄여 주었다.
def solution(phoneBook):
phoneBook = sorted(phoneBook)
for p1, p2 in zip(phoneBook, phoneBook[1:]):
if p2.startswith(p1):
return False
return True
zip을 사용하여 한번에 여러개의 변수를 짝지을 수 있다.
개수가 다르면 가장 작은 개수에 맞추어 zip 되고 나머지는 버린다.
for number, upper, lower in zip("123456", "ABCDE", "abcde"):
print(number, upper, lower)
# 1 A a
# 2 B b
# 3 C c
# 4 D d
# 5 E e
zip을 사용하여 역으로 unzip할 수도 있다.
A=(1,2,3,4,5)
B=("A","B","C","D","E")
pairs= list(zip(A,B))
print(pairs)
#[(1, 'A'), (2, 'B'), (3, 'C'), (4, 'D'), (5, 'E')]
C,D=zip(*pairs)
print(C,D)
#(1, 2, 3, 4, 5) ('A', 'B', 'C', 'D', 'E')