문제
https://programmers.co.kr/learn/courses/30/lessons/42577
코딩테스트 연습 - 전화번호 목록
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조
programmers.co.kr
첫 번째 해결방법
문제를 0번째 인덱스가 접두어 인 경우 False를 반환하는 것으로 잘 못 이해하고 푼 코드
먼저 key값을 0번째 인덱스로 정하고, 지워준다.
그 후 기본 결과를 True로 넣어준 후, 접두사와 숫자 단위가 같아지도록 숫자를 변환한 후 answer에 넣어주었다.
그 후 answer값과 0번째 인덱스의 값이 같다면 False를 넣고 다른 것들은 탐색하지 않아도 되므로 break를 사용하였다.
-> 문제를 잘 못 이해해 정확도에서 몇 문제 틀렸고, for문을 많이 사용하여 효율성에서도 통과하지 못했다.
def solution(phone_book):
key = phone_book[0]
del phone_book[0]
result = True
for i in phone_book:
num = i
total = len(i)
minus = len(i) - len(key)
calc = 1
for j in range(minus):
calc *= 10
answer = int(i) // calc
if int(answer) == int(key):
result = False
break
return result
두 번 째 해결방법
문자열을 정렬해 준 후 (문자열의 정렬은 int정렬과 달리 정말 직관적으로 길이 상관 없이 각 자리수의 숫자를 비교해서 정렬한다. ) zip을 사용하여 앞 뒤 문자를 비교할 수 있게 하였다 zip함수를 사용함으로 인해 p1은 0번째 인덱스부터 len(phone_book) - 1 번째 인덱스, 그리고 p2는 1번 째 인덱스부터 마지막 인덱스까지의 값을 가져 이중 for문의 역할을 한다.
그 후 startswitch를 사용하여 앞의 숫자를 접두어로 가지는지 판단하여 접두어로 가지면 False를 반환하고 끝까지 돌았는데 접두어가 없다면 True를 반환한다.
def solution(phone_book):
phone_book.sort()
for p1,p2 in zip(phone_book,phone_book[1:]):
if p2.startswith(p1):
return False
return True'Algorithm > 프로그래머스' 카테고리의 다른 글
| 프로그래머스 H-Index (0) | 2022.04.21 |
|---|---|
| [python] 프로그래머스 "가장 큰 수" (0) | 2022.04.21 |
| 프로그래머스 k번째 수 (0) | 2022.04.21 |
| 위장 (0) | 2022.04.05 |
| 완주하지 못한 선수 (0) | 2022.04.03 |