728x90
✍️ 문제
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 return
["119", "97674223", "1195524421"] | false |
["123","456","789"] | true |
["12","123","1235","567","88"] | false |
✍️ 아이디어 (Hash 문제니까 Hash로 풀어보자!!)
- Hash를 생성한다.
- Hash에 전화번호 목록을 Key값으로 담고 Value는 1로 지정한다(기본값)
- Hash의 Key값 하나를 가져와서 string에 추가해주고
- 해당 string과 hash의 값을 비교한다.
- 일치하는 값이 있으면 False (단, 자기 자신이 아니어야함)
- 일치하는 값이 없으면 True를 반환한다.
주의
- 모든 전화번호가 접두어가 될 수 있다.
- 하나라도 일치하는 값이 있다면 바로 return되도록 하자(모두 검사 할 필요 X)
✍️ 코드
# 전화번호부
def solution(phone_book):
# 해시 선언
hash = {}
# 해시 초기화
for i in phone_book:
hash[i] = 1
# 해시 돌면서 확인
for i in phone_book:
# 접두어를 확인하기 위한 string 변수 생성
target = ""
for j in i:
target += j
if target in hash and target != i:
return False
return True
✍️ 회고
첫번째 들어오는 수만 접두사가 된다고 생각해서 일주일을 날렸다. 알고리즘 포스팅을 돌아보면 문제를 이해하지 못해서 혹은 잘못 기억해서 시간을 많이 버렸다. 앞으로 문제를 완벽하게 이해하고 코드를 짜도록 해야겠다. 그리고 문제가 가물가물하면 귀찮다고 풀었던 코드를 보면서 문제를 유추하는 나쁜 버릇이 있는데, 이것도 고쳐야겠다 ㅠ.ㅠ
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 개인정보 수집 유효기간(C#) (0) | 2023.12.27 |
---|---|
[프로그래머스] 달리기 경주(C#) (0) | 2023.12.11 |
[프로그래머스] 해시 - 포켓몬(feat. python) (0) | 2023.09.07 |
[Python] 프로그래머스 - 해시 - 완주하지 못한 선수 (0) | 2023.08.30 |
[프로그래머스] 연습문제 - 햄버거 만들기(feat. Python) (2) | 2023.08.02 |