def solution(phone_book):
for i in range(len(phone_book)):
length = len(phone_book[i])
for idx in range(i+1,len(phone_book)):
if phone_book[i] == phone_book[idx][0:length]:
return False
break
return True
[정리]
1. 간단하게 이중포문을 사용해서 리스트 원소의 크기만큼 배열을 slicing해서 비교해주었다.
1-1. 위와같이 코드를 짰을때 테스트케이스 3개는 통과하지만 그뒤에 8번과 9번의 테스트 케이스를 통과하지 못했다.
1-2. 원인분석 결과 ["97674223", "1195524421", "119"]와 같은 테스트 케이스를 입력받을때는 통과를 못하는 것이다 따라서 무조건 정렬을 한 후에 내가 짠 코드를 사용해야 할 것이다. (sort()사용)
[최종코드]
def solution(phone_book):
phone_book.sort() # 제일 작은 수가 앞에와야 정확한 결과가 나온다.
for i in range(len(phone_book)):
length = len(phone_book[i]) #원소의 처음부터 길이를 저장하고
for idx in range(i+1,len(phone_book)): #모든 저장된 번호들에 대해서
if phone_book[i] == phone_book[idx][0:length]: #지정된 수의 크기만큼까지만 비교
return False #하나라도 있다면 False 출력후 break로 빠져나오자
break
return True
[다른 분들의 풀이법]
1. zip() + startswith 메소드를 사용한 풀이
2. 정규식을 사용한 풀이 (import re)
시간복잡도를 잘 생각해보고 사용하도록 하자
'[PS] 알고리즘문제풀이' 카테고리의 다른 글
[프로그래머스,PS,스택,큐][PYTHON] #1. 탑 (0) | 2020.05.14 |
---|---|
[프로그래머스,PS,해시][PYTHON] #4.베스트 앨범 (1) | 2020.05.13 |
[프로그래머스,PS,해시][PYTHON] #3.위장 (0) | 2020.05.13 |
[프로그래머스,PS,해시][PYTHON] #1.완주하지 못한 선수 (0) | 2020.05.12 |
[백준알고리즘, PS][PYTHON] 2110번 공유기 설치 (0) | 2020.04.08 |