우선 사전 순서대로 정렬을 한 후 앞의 번호 길이를 기준으로 뒤에 있는 번호를 잘라서 비교하면 될 거라 생각했다. 아직 자바에 익숙한지 풀이를 생각해도 파이썬 코드로 옮기는게 생각보다 오래걸렸다.
def solution(phone_book):
phone_book=sorted(phone_book) #String이므로 사전순으로 정렬된다.
for i in range(len(phone_book)-1): #인덱스로 반복문 돌리기 맨마지막 요소는 제외
str = phone_book[i]
if(str==phone_book[i+1][:len(str)]): #앞서 맨 마지막 인덱스 제외 안 하면 여기서 오류 걸림
return False
return True
코드는 통과 됐지만 해시문제에 해시를 쓰지 않았기에 좋은 답은 아니다. 효율성도 좋지 않다.
def solution(phone_book):
answer = True
dic ={} #key,value형태의 딕셔너리이용
for pNumber in phone_book:
dic[pNumber] = 1 #key:폰번호 value:1
for pNumber in phone_book: #각각 폰번호마다 검사
temp=""
for num in pNumber: #폰번호를 한글자로 쪼개서 반복문 "243"이면 "2" "4" "3"
temp +=num #쪼갠 숫자를 반복문이 돌아갈 때마다 붙음
if temp in dic and temp!=pNumber: #딕셔녀리의 키로 존재하는지 검사
answer = False
return answer
해시 파트에 속한 문제니 해시를 잘 이용한 풀이다. 그나저나 스트링을 저절로 쪼개서 한글자씩 저절로 돌릴 수 있다니 파이썬은 정말 편하다.
def solution(phone_book):
phone_book.sort(key=lambda x: len(x)) #길이로 정렬
print(phone_book)
for a in range(len(phone_book)): #리스트 기준요소를 반복문 돌리기
for b in range(a+1, len(phone_book)): #기준 요소의 다음 요소부터 반복문 돌리기
if phone_book[b][:len(phone_book[a])] == phone_book[a]: #다음 요소가 기준요소의 길이로 잘랐을때 값이 같으면 false
return False
return True
phone_book = sorted(phone_book, key= len)라고 써도 된다.
def solution(phone_book):
phone_book = sorted(phone_book)
for p1, p2 in zip(phone_book, phone_book[1:]):
if p2.startswith(p1): #startswith()함수 배워갑니다...
return False
return True
level2인데도 고민하고 푸는데 꽤 오래 걸렸다... 다른 사람들 풀이를 보면 코드 길이가 짧아서 신기하다. 꾸준히 하다보면 언젠가 사고력이 늘 것이라고 믿는다! 화이팅!!