[프로그래머스] 전화번호 목록 _ 파이썬

메링·2021년 6월 1일
0

알고리즘 문제

목록 보기
1/22

1차 시도 (시간 초과)

  1. sort를 문자열 길이 순으로
  2. 이중 반복문 사용해서 한개 씩 전부 비교함
  • 문자열 슬라이싱이나 반복문 내부는 거의 비슷했으나 문자순으로 sort해서 바로 뒤만 비교하면 된다는 생각을 못 함.

2차 시도 (성공 - 다른 분 풀이 참고)

  1. sort를 문자순으로
  2. 12, 123 1234 2567 이런 순이기 때문에 바로 뒤의 전화번호의 접두사가 아니면 무조건 접두사가 아님을 이용
def solution(phone_book):
    answer = True
    phone_book.sort()
    
    for idx in range(len(phone_book)-1):
        if len(phone_book[idx]) < len(phone_book[idx+1]):
            if phone_book[idx] == phone_book[idx+1][:len(phone_book[idx])]:
                answer = False
                break
    return answer

다른 풀이

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

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

zip()

  • 여러 개의 순회 가능한(iterable) 객체를 인자로 받고,
    각 객체가 담고 있는 원소를 tuple 형태로 차례로 접근할 수 있는 반복자(iterator)를 반환
  • 양 측에 있는 데이터를 하나씩 차례로 짝을 지어준다.
  • zip() 함수로 넘기는 인자의 길이가 다를 때는 주의.
    가장 짧은 인자 기준 데이터가 엮이고, 나머지는 버린다.

startswith(시작하는 문자, 시작 지점)

  • startswith는 문자열이 특정문자로 시작하는지 여부를 알려줌. (true나 false 를 반환)
profile
https://github.com/HeaRinKim

0개의 댓글