1. 전화번호 목록
- 난이도
- Level 2
- 출처
A. 📜 문제
위 프로그래머스 사이트에 접속하여 문제를 확인해주세요.
B. 💡 내 답안
a. 😅 1차 시도 (실패)
def solution(phone_book):
"""
sort를 하면 문자열들(['1', '2', '3', '123', '24'])은 ['1', '123', '2', '24', '3'] 으로 정렬된다.
그럼 현재 인덱스의 문자열과 다음 인덱스의 문자열을 비교하여 접두어인지 확인할 수 있다.
"""
phone_book.sort()
for i in range(len(phone_book) - 1):
phone_len = len(phone_book[i])
# 다음 인덱스의 문자열의 접두어가 현재 인덱스와 같은지 알기 위해서는
# 다음 인덱스의 문자열에서 현재 인덱스의 길이만큼만 비교하면 알 수 있다.
if phone_book[i] == phone_book[i + 1][:phone_len]:
return False
return True
b. 😊 2차 시도 (성공)
def solution(phoneBook):
phoneBook = sorted(phoneBook)
for p1, p2 in zip(phoneBook, phoneBook[1:]):
if p2.startswith(p1):
return False
return True
a. 🙄 회고
내 풀이
- 다른 방법이 떠오르지 않아서 문자열 비교로 풀었다.
반성
- zip()을 이용해서 비교하고자하는 문자열을 동시에 비교할 수 있다는 것을 생각하지 못했다.
- 문자열의 startswitch()를 사용하여 쉽게 비교할 수 있다는 것을 잊고 있었다.
결론
- 자주 사용하지 않으면 잊는다.
C. 🧐 문제 해설
이해한 내용을 바탕으로 작성했습니다.
In[16]: a
Out[16]: ['1', '123', '2', '24', '3']
In[17]: list(zip(a, a[1:]))
Out[17]: [('1', '123'), ('123', '2'), ('2', '24'), ('24', '3')]
zip()을 사용하면 인자값들 중 길이가 짧은 것만큼만 반환된다.
참고문헌
위클리 챌린지. 코딩테스트 연습 - 전화번호 목록 | 프로그래머스 (programmers.co.kr). Programmers. (accessed Dec 16, 2021)
Ghost