일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 캐글
- 삼성 SDS Brigthics
- 브라이틱스 서포터즈
- 삼성SDS Brigthics
- 포스코 아카데미
- 추천시스템
- 혼공머신
- 혼공머신러닝딥러닝
- 삼성SDS
- 직원 이직률
- 팀 분석
- Brigthics
- 모델링
- 영상제작기
- Brightics Studio
- 데이터 분석
- 개인 의료비 예측
- 직원 이직여부
- Brigthics를 이용한 분석
- 브라이틱스
- 혼공
- 포스코 청년
- 혼공학습단
- 삼성 SDS
- Brightics
- 삼성SDS Brightics
- Brigthics Studio
- 데이터분석
- Brightics를 이용한 분석
- 노코드AI
- Today
- Total
데이터사이언스 기록기📚
[프로그래머스] Level2_전화번호 목록(해시) 본문
📌문제 유형
해시
📌문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
📌문제 풀이
1차 시도(정확성 : 54.2, 효율성 : 8.3, 합계 : 62.5)
def solution(phone_book):
phone_dict = {i: phone_book[i] for i in range(len(phone_book))}
for i in phone_dict.keys():
for j in range(i+1,len(phone_dict)):
if phone_dict[i] in phone_dict[j]:
return False
return True
2차 시도(정확성 :62.5, 효율성 : 4.2, 합계 66.7)
def solution(phone_book):
phone_dict = {i: phone_book[i] for i in range(len(phone_book))}
for i in phone_dict.keys():
for j in range(i+1,len(phone_dict)):
if phone_dict[j].startswith(phone_dict[i]) == True:
return False
return True
3차 시도(정확성 : 75, 효율성 : 12.5, 합계 87.5)
def solution(phone_book):
phone_book = list(map(int, phone_book))
phone_book.sort()
phone_book = list(map(str, phone_book))
phone_dict = {i: phone_book[i] for i in range(len(phone_book))}
for i in phone_dict.keys():
for j in range(i+1,len(phone_dict)):
if phone_dict[j].startswith(phone_dict[i]) == True:
return False
return True
4차 시도(통과)
- '문자'일 때 정렬 기준 적용
- 기본 sort일 때, 길이 상관없이 앞자리 숫자가 작은 순서대로 정렬
- (for문 2번 사용할 경우 시간초과) for문 1번만 이용하여 이전 값과 다음값만 비교하기
- 값 중 앞에만 일치하는지 확인(startswith)
Python 문자열 비교 완전 일치 부분 일치 소스 예제
두개의 문자열을 비교하는 방법을 보겠습니다. 비교 방법으로는 완전 일치, 부분 일치가 있습니다. ・ 완전 일치 : == , != ・ 부분 일치 : in , not in ・ 전방 일치 : startswith() ・ 후방 일치 : endswith().
ponyozzang.tistory.com
def solution(phone_book):
# 문자열 정렬
phone_book.sort()
# (시간초과 피하기 위해) 이전 값과 다음 값만 비교
for i in range(len(phone_book)):
if i != len(phone_book) - 1:
if phone_book[i+1].startswith(phone_book[i]) == True:
return False
else:
break
return True
📌다른 사람들의 풀이
zip 이용
- zip으로 현재 값과 다음 값을 비교
def solution(phoneBook):
phoneBook = sorted(phoneBook)
# zip으로 현재 값, 다음 값만 비교 가능
for p1, p2 in zip(phoneBook, phoneBook[1:]):
if p2.startswith(p1):
return False
return True
Hash 이용
def solution(phone_book):
answer = True
hash_map = {}
# hash_map에 phone_book value 1로 해서 모두 저장
for phone_number in phone_book:
hash_map[phone_number] = 1
# 번호 하나씩 탐색
for phone_number in phone_book:
temp = ""
# 번호 다 쪼개기
for number in phone_number:
# temp에 넣어서 hash_map과 비교(단, phone_number와 다른 경우)
temp += number
if temp in hash_map and temp != phone_number:
answer = False
return answer
📌리뷰
- 정렬의 기본 개념
- '숫자'일 때 정렬 기준 : 숫자 작은 것부터 정렬
- '문자'일 때 정렬 기준 : 길이 상관없이, 숫자 작은 것부터 정렬
📌참고
[python] List to Dict (리스트를 딕셔너리로 변환) 총 정리!!
검색어 : List to Dict List 에서 Dict으로 변환하는 방법에는 여러가지 방법이 있습니다...! string_list = ['A','B','C'] 위와 같은 리스트가 있을때, 딕셔너리로 변환시키는 여러가지 방법들 ..! 1. Dictionary..
security-nanglam.tistory.com
[Python] Dictionary 예제 - Keys(), Values(), items()
Dictionary 예제 입니다. Key와 Value로 이루어져 있습니다. 해당 value의 key값을 입력하여 Dictionary에 추가하며 key값을 가지고 value 값을 출력할 수 있습니다. # Dictionary 선언 및 구성 변수명 = { } 로..
hsd0937.tistory.com
리스트의 문자열을 int 형태로 변환
list_a = ['1', '2', '3', '4'] -> list_a = [1, 2, 3, 4] 로 바꾸고 싶을 때, python 2. list_a = map(int, list_a) python 3. list_a = list(map(int, list_a)) 를 해주면 된다. 혹은 list_a = [int (i) for i..
shayete.tistory.com
[파이썬기초] 리스트 요소 길이 순으로 정렬
[파이썬기초] 리스트 요소 길이 순으로 정렬 리스트 요소를 길이 순으로 정렬할 때는 sort 메소드에서 key=len 을 입력해주면 됩니다. 리스트를 하나 정의합시다. >>> L=[1,2,3,4,5] >>> L [1,2,3,4,5] 길이순
pybasall.tistory.com
'Coding Test > 프로그래머스(Python)' 카테고리의 다른 글
[프로그래머스] Level 3_이중우선순위큐(힙) (0) | 2022.09.25 |
---|---|
[프로그래머스] Level 2_더 맵게(힙) (1) | 2022.09.25 |
[프로그래머스] Level2_위장(해시) (0) | 2022.09.24 |
[프로그래머스] Level 2_H-Index(정렬) (0) | 2022.09.22 |
[프로그래머스] Level 2_가장 큰 수(정렬) (0) | 2022.09.20 |