Notice
														
												
											
												
												
													Recent Posts
													
											
												
												
													Recent Comments
													
											
												
												
													Link
													
											
									| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 29 | 
| 30 | 
													Tags
													
											
												
												- 알고리즘
 - MySQL
 - 파이썬
 - 코딩테스트
 - 엘리스
 - 큐
 - 나는 리뷰어다
 - Machine Learning Advanced
 - Python
 - TEAM-EDA
 - 추천시스템
 - 입문
 - 나는리뷰어다
 - Recsys-KR
 - 튜토리얼
 - Image Segmentation
 - hackerrank
 - pytorch
 - DilatedNet
 - 3줄 논문
 - 프로그래머스
 - Semantic Segmentation
 - eda
 - Segmentation
 - 스택
 - 협업필터링
 - Object Detection
 - DFS
 - 한빛미디어
 - TEAM EDA
 
													Archives
													
											
												
												- Today
 
- Total
 
TEAM EDA
[프로그래머스] 전화번호 목록 / 파이썬 본문
전화번호 목록
문제 설명
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다.
전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.
- 구조대 : 119
 - 박준영 : 97 674 223
 - 지영석 : 11 9552 4421
 
전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.
제한 사항
- phone_book의 길이는 1 이상 1,000,000 이하입니다.
 - 각 전화번호의 길이는 1 이상 20 이하입니다.
 
입출력 예제
| phone_book | return | 
|---|---|
| [119, 97674223, 1195524421] | false | 
| [123,456,789] | true | 
| [12,123,1235,567,88] | false | 
입출력 예 설명
입출력 예 #1
앞에서 설명한 예와 같습니다.
입출력 예 #2
한 번호가 다른 번호의 접두사인 경우가 없으므로, 답은 true입니다.
입출력 예 #3
첫 번째 전화번호, “12”가 두 번째 전화번호 “123”의 접두사입니다. 따라서 답은 false입니다.
풀이
- sorted를 이용해서 앞자리가 같은 문자열을 정렬
 (phone_book[start][0] == A[0])에서 앞자리가 같은 값들만 비교- 중간에 똑같은 값을 찾으면 탈출 (
A == phone_book[start][0:len(A)]) 
- 중간에 똑같은 값을 찾으면 탈출 (
 
def solution(phone_book):
    answer = True
    phone_book = sorted(phone_book)
    while len(phone_book) > 1: 
        start = 0
        A = phone_book.pop(0)
        while (phone_book[start][0] == A[0]) & (start < len(phone_book)):
            if A == phone_book[start][0:len(A)]:
                answer = False
                break
            start += 1
            if answer == False: break
    return answer
다른사람 풀이
- 
풀이는 똑같음
 - 
startswith는 괄호안의 값이 같은지 확인하는 함수
- A.startswith(B, 0, 10) : A의 0부터 10이 B와 같은 지 확인
 - 아무값도 없으면 0부터 B의 길이까지 확인
 
 - 
근데, 이 방법이 되는 이유가 sorted()에 의해서 됨
- 
위의 내 코드도 sorted때문에 앞자리 같은 값만 비교하지 않아도 되었음 !!!
 
 - 
 
def solution(phoneBook):
    phoneBook = sorted(phoneBook)
    for p1, p2 in zip(phoneBook, phoneBook[1:]):
        if p2.startswith(p1):
            return False
	return True
출처: 프로그래머스 코딩 테스트 연습,https://programmers.co.kr/learn/challenges
'EDA Study > 알고리즘' 카테고리의 다른 글
| [프로그래머스] 타겟 넘버 / 파이썬 (0) | 2020.04.08 | 
|---|---|
| [프로그래머스] 구명보트 / 파이썬 (1) | 2020.04.07 | 
| [프로그래머스] 위장 / 파이썬 (0) | 2020.04.05 | 
| [프로그래머스] H-Index / 파이썬 (0) | 2020.04.05 | 
| [프로그래머스] 더 맵게 / 파이썬 (0) | 2020.04.05 |