[프로그래머스/Python] 알고리즘고득점Kit-해시-전화번호 목록

2024. 10. 13. 13:34·코딩테스트/프로그래머스
728x90
반응형

📌 문제링크

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

📌 문제설명

전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.

  • 구조대 : 119
  • 박준영 : 97 674 223
  • 지영석 : 11 9552 4421

전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.
 
# 제한 사항

  • phone_book의 길이는 1 이상 1,000,000 이하입니다.
  • 각 전화번호의 길이는 1 이상 20 이하입니다.
  • 같은 전화번호가 중복해서 들어있지 않습니다.

# 입출력 예제 

📌 풀이과정

# 처음 시도 

  • 길이순으로 짧은 것이 다른 녀석의 접두어가 될 확률이 높다고 생각했다. 그래서 길이 순으로 먼저 정렬을 했고, 
  • 각 요소에 대해서 그 녀석으로 시작하는지 이중for문을 돌렸다. 
  • => testcase는 모두 통과했지만, 효율성 테스트3,4 실패했다. 
phone_book.sort(key=lambda x:len(x))
for i in range(len(phone_book)):
	key = phone_book[i]
	kLen = len(key)
	for j in range(i+1, len(phone_book)):
    	if key == phone_book[j][0:kLen]: 
    		#print(key, phone_book[j])
    		return False
    return True

 

# 구글링 후 

  • 이중 for문을 돌리는 게 일단 비효율적이라곤 생각이 들었다. 
  • 배열 phone_book을 정렬할 때, 앞 숫자들끼리 비슷한 것끼리 묶이는 방법이 뭐 없나 생각을 했다. 
  • ✅ 문자열끼리 비교할 때는 맨 앞 문자부터 비교해 나간다는 점!!! 을 잊고 있었다. 
    • 첫번째 예제의 경우 ['119', '1195524421', '97674223']과 같이. 
    • 내가 원하던 게 이거다. 그러면 앞 뒤끼리 비교해나갈 때 False가 나올 확률이 높아진다.

📌 풀이코드 

# 12:56 start 1:18 end (search yes)
def solution(phone_book):
    answer = True
    phone_book.sort() # 문자열 정렬할 때 맨 앞 문자부터 하나씩 비교한다는 점을 알고 있으면
    #print(phone_book)
    # 첫번째 예제는 이렇게 정렬된다. ['119', '1195524421', '97674223']
    for i in range(len(phone_book)-1):
        if phone_book[i] == phone_book[i+1][:len(phone_book[i])]:
            return False 
    return True
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[프로그래머스/Python] 알고리즘고득점Kit-해시-폰켓몬  (5) 2024.10.13
[프로그래머스/Python] 알고리즘고득점Kit-해시-의상  (1) 2024.10.13
[프로그래머스/Python] 알고리즘고득점Kit-정렬-가장 큰 수  (1) 2024.10.12
[프로그래머스/Python] 알고리즘고득점Kit-스택/큐-같은숫자는 싫어  (1) 2024.10.12
[프로그래머스/Python] 코딩테스트연습 - DFS/BFS - 여행경로  (2) 2024.10.08
'코딩테스트/프로그래머스' 카테고리의 다른 글
  • [프로그래머스/Python] 알고리즘고득점Kit-해시-폰켓몬
  • [프로그래머스/Python] 알고리즘고득점Kit-해시-의상
  • [프로그래머스/Python] 알고리즘고득점Kit-정렬-가장 큰 수
  • [프로그래머스/Python] 알고리즘고득점Kit-스택/큐-같은숫자는 싫어
heeya16
heeya16
개발 공부 냠냠
  • heeya16
    개발자 희야
    heeya16
  • 전체
    오늘
    어제
    • 분류 전체보기 (105)
      • 코딩테스트 (66)
        • 프로그래머스 (38)
        • SWEA (2)
        • BAEKJOON (26)
      • 알고리즘 (7)
      • 자료구조 (19)
      • 프로젝트 (5)
      • 취업 주르륵 (2)
      • 데이터베이스 (0)
      • IT지식 (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    1003
    10448
    10773
    10월
    10진수
    11047
    11399
    11403
    11866
    1449
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
heeya16
[프로그래머스/Python] 알고리즘고득점Kit-해시-전화번호 목록
상단으로

티스토리툴바