Algorithms / Programmers / 전화번호 목록

Onam Kwon·2022년 4월 8일
0

Algorithms

목록 보기
8/24

링크

https://programmers.co.kr/learn/courses/30/lessons/42577

풀이

2가지 방법으로 풀었다.

코드

  1. sort then for:
  • 정렬 후 1차원 반복문을 통해 1부터 시작하는 i번째와 i-1번째의 번호 두개를 비교한다.
    • 파이썬 메소드의 startswith메소드를 사용해서 비교하면 편하게 할 수 있다.
  • phone_book[i].startswith(phone_book[i-1])인 경우 phone_book[i]가 `phone_book[i-1]로 시작할 경우 True를 반환한다. 이때 solution함수에 False를 반환해 종료하면 된다.
    • 2중 반복 안해도 됨? -> sort를 해줄경우 0번째가 2번째의 prefix라면 1번째도 해당되니 안해도 됨.
    • phone_book[i].startswith(phone_book[i-1]), phone_book[i-1].startswith(phone_book[i]) 두개 동시에 비교 안해도 됨? ->
      초반에 sort해놔서 안해도 됨.
def solution(phone_book):
	answer = True
	phone_book.sort()
	for i in range(1,len(phone_book)):
		if phone_book[i].startswith(phone_book[i-1]):
			return False
	return answer
  1. hash:
  • phone_book리스트 전체를 hash에 넣는다.
  • phone_book의 번호 즉 아이템을 반복.
    • 아이템의 숫자 한자리씩 temp에 추가해가며 반복.
      • hash에 존재하고 아이템 자기 자신이 아닐경우 False리턴.
def solution(phone_book): 
    answer = True
    hash = {}
    for item in phone_book:
        hash[item] = 1
    for item in phone_book:
        temp = ''
        for digit in item:
            temp += digit
            if temp in hash and temp != item:
                answer = False
                return answer
    return answer

Algorithms / Programmers / 전화번호 목록

profile
권오남 / Onam Kwon

0개의 댓글