티스토리 뷰
해시 level 2 문제 입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/42577
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다.
전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.
구조대 : 119
박준영 : 97 674 223
지영석 : 11 9552 4421
전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.
제한 사항
phone_book의 길이는 1 이상 1,000,000 이하입니다.
각 전화번호의 길이는 1 이상 20 이하입니다.
같은 전화번호가 중복해서 들어있지 않습니다.
문제 접근
우선 내가 문제에서 중요하다고 생각한건 다음과 같다.
1. 접두어란 무엇인가
2. 개수를 세는 것이 아니라 True / False 만 체크하는 것
접두어는 맨 앞에 있는 글자들을 말하는 듯 했고 그래서 문자열에 해당 직전 문자열이 있으면 False 로 체크하도록 했다.
내가 작성한 답
첫 시도에서는 string에서 특정 문자열을 찾기 위해서 in 을 사용해서 풀었다. 하지만 in은 접두어 라는 조건에 알맞지 않은 방법이란 것을 늦게 깨달았다.
두 번째 시도에서는 아래와 같이 했는데, 틀렸다고 나왔다.
왜인지 생각해보다가 아마 리스트 마지막까지 접두어로 겹치는 것이 없을 때 에러가 발생해서 그런 것이 아닐까 라고 생각했다. 실제로 91.7 점까지 나왔지만 100점이 안나와서 다시 시도해봤다.
def solution(phone_book_origin):
phone_book = sorted(phone_book_origin, key=len)
if len(phone_book) == 1:
return True
for i in range(len(phone_book)):
for j in range(i+1,len(phone_book)):
if phone_book[i] == phone_book[j][:len(phone_book[i])]:
return False
return True
세 번째 시도에서는 새로운 시도를 해봤다.
리스트를 정렬했을 때, 무조건 자기 다음 요소는 자신을 포함하거나 안하거나 이다. 그 다다음 요소는 다음 요소보다 자기와 같은 확률이 낮다. ( 정렬하게 되면 멀어질 수록 자기와 다르다. )
그래서 딱 자기의 길이만큼만 비교하면 된다. 그래서 굳이 for 문을 2개씩 쓰지 않아도 된다는 사실을 깨달았다.
그제서야 100점이 나왔따.
def solution(phone_book):
phone_book.sort() # 접두어가 되기 위해선 길이가 짧거나 같아야하므로 정렬
# 정렬되는 방식이 오름차순으로 정리하고 앞자리가 같다면 길이도 오름차순으로 정렬된다.
print(phone_book)
for i in range(0,len(phone_book)-1): # 자기 자신과 그 다음을 계속 비교함
# 문자열을 정렬했기 때문에, 다음 요소는 자신을 포함하거나 안하거나 둘 중 하나..
# 그래서 자신의 길이만큼만 비교하면 됨
if phone_book[i] == phone_book[i+1][0:len(phone_book[i])]: # 그러다가 자신의 길이만큼 다른 요소가 같다면 접두어라고 판단
return False
return True
'알고리즘' 카테고리의 다른 글
[프로그래머스] 카펫 (0) | 2024.04.25 |
---|---|
[프로그래머스] 의상 (0) | 2024.03.08 |
[프로그래머스] 완주하지 못한 선수 (0) | 2024.03.05 |
[leetcode] 168. Excel Sheet Column Title / python ord 함수 / python chr 함수 (0) | 2024.01.17 |
[백준][Python] 암호 만들기 (0) | 2022.07.21 |
- Total
- Today
- Yesterday