[프로그래머스/Python] 해시 - 전화번호부 목록

🤓 나의 풀이

def solution(phone_book):
    answer = True
    # ["119","1195524421","97674223"]
    phone_book.sort()
    for i in range(0,len(phone_book)-1):
        if phone_book[i+1][:len(phone_book[i])] == phone_book[i]:  
            answer = False
            break
    return answer
  • if ~ return False else ~ return True : 순서대로 비교하기때문에 첫번째 str이 두번째 str의 접두어가 아니고, 세번째 str의 접두어일 경우를 고려하지 못함. 첫번째랑 두번째 비교했을 때 바로 True로 반환하기 때문에
  • answer = True
  • phone_book.sort(): 문자열 비교에서는 보통 정렬 먼저!
  • break: for문을 다 비교할 필요 없으니까

👩🏻‍🏫 다른 풀이

def solution(phoneBook):
    phoneBook = sorted(phoneBook)
    for p1, p2 in zip(phoneBook, phoneBook[1:]):
        if p2.startswith(p1):
            return False
    return True

✏️ Python 문법

리스트.sort() vs sorted(리스트)

  • 숫자 정렬이 아니라 문자열 정렬이어서 "1195524421" 이 "97674223"보다 앞에 오게 됨 어차피 접두어만 찾는거라서 정렬 후에는 앞 뒤만 비교해도 상관없음
  • 리스트 명.sort() : 리스트형의 메소드이며 리스트 원본값을 직접 수정
  • sorted(리스트 명) : 내장 함수이며 리스트 원본 값은 그대로이고 정렬 값을 반환
list = [2,3,1]
sort_list = list.sort()
print(list)    # [1,2,3]
print(sort_list) # None -> 정렬된 값은 리턴되지 않음!! 원본 리스트 값이 정렬된 값으로 수정된 것!!
list = [2,3,1]
sorted_list = sorted(list)
print(list)  #  [2,3,1] -> 원본 리스트는 값이 유지됨
print(sorted_list)  # [1,2,3] -> 정렬된 새 리스트

zip(리스트, 리스트,,,)

  • 내장함수
  • 동일한 요소 개수를 가진 두 개 이상의 리스트를 인자로 받고, 각 리스트의 같은 인덱스의 요소들끼리 묶은 튜플을 요소로 하는 리스트를 만들어 리턴
print(zip([1,2,3], (4,5,6), "abcd")) # <zip object at 0x7f304c099380>

test = list(zip([1,2,3], (4,5,6), "abcd"))
print(test) # [(1, 4, 'a'), (2, 5, 'b'), (3, 6, 'c')]

str1.startswith(str2,beg,end)

  • 메소드
  • str : 찾고자하는 문자열
    beg : 문자열의 검색 시작 위치를 설정하는 값
    end : 문자열의 검색 끝 위치를 설정하는 값
  • str1이 str2로 시작할 때 True를 반환, 아닌 경우 False를 반환

str1.endswith(str2,beg,end)

  • 메소드
  • str1이 str2로 끝날 때 True를 반환, 아닌 경우 False를 반환
str = "this is string example....wow!!!"
print(str.startswith( 'this' ))  # True
print(str.startswith( 'is', 2, 4 ))  # True
print(str.startswith( 'this', 2, 4 )) # Fasle

print(str.endswith( 'wow!!!' )) # True
print(str.endswith( 'is', 2, 4 )) # True
print(str.endswith( 'is', 2, 6 )) # Fasle

한줄 평: 정답을 흘끔흘끔 훔쳐보긴 했지만 그래도 풀긴 풀었네.. 2게 된다고?

좋은 웹페이지 즐겨찾기