[알고리즘] 해시(Hash) 프로그래머스 2단계 - 전화번호 목록

minidoo·2020년 9월 5일
0

알고리즘

목록 보기
2/85
post-thumbnail
def solution(phone_book):
    
    phone_book.sort()
    
    for i in range(len(phone_book)-1):
        if phone_book[i+1].startswith(phone_book[i]) == True:
            return False
    
    return True
        

풀이과정

  1. string의 정렬 형태 이용
    ⇒ 각 자리에 있는 요소 비교
  2. 정렬이 완료된 상태로 앞 뒤 string만 비교하면 됨

다른 사람 풀이

def solution(phoneBook):
    phoneBook = sorted(phoneBook)

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

새로 배운 내용

startswith

startwith은 어떤 문자열의 (시작~)이 어떤 문자열로 시작하는지 알려준다.
두 번째 인자로 시작, 세 번째 인자로 끝-1 을 설정할 수도 있다.

name = 'miniddo'

name.startswith('mi')  // True
name.startswith('mi', 2, 4 ) // False
name.startswith('ddo')  // False

in, not in

파이썬은 innot in을 사용하여 포함 여부를 알 수 있다.

s1 = 'welcome'

print('we' in s1)  // True
print('come' in s1)  // True
print('come' not in s1)  // False

startswithin의 차이점은 startswith가 True가 나오기 위해서는 문자열의 시작점과 일치해야 한다는 것이다. in은 문자열이 해당 문자열에 들어있기만 하면 True값이 나온다.


zip

zip은 동일한 개수로 이루어진 자료형을 묶어주는 함수이다.
길이가 작은 것을 기준으로 묶는다.

list(zip([1, 2, 3], [4, 5, 6]))
// [(1, 4), (2, 5), (3, 6)]

list(zip([1, 2], [4, 5, 6]))
// [(1, 4), (2, 5)]

enumerate

enumerate는 순서가 있는 자료형(리스트, 튜플, 문자열)을 받아 인덱스와 값으로 리턴해준다.

for index, num in ['a', b', 'c']:
  print(index, num)
  
// 0 'a'
// 1 'b'
// 2 'c'

2차 풀이

def solution(phone_book):
    
    phone_book.sort()
    flag = True
    
    for i in range(len(phone_book)-1):
        if phone_book[i] in phone_book[i+1]:
            flag = False
            break
    
    return flag

0개의 댓글