모눈종이에 사각사각

[프로그래머스] 전화번호 목록 본문

CodingTest/Programmers

[프로그래머스] 전화번호 목록

모눈종이씨 2022. 4. 16. 11:53

🍎[프로그래머스] 전화번호 목록

문제링크

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

 

코딩테스트 연습 - 전화번호 목록

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

programmers.co.kr

⚾ 코드

def solution(phone_book):
    answer = True

    phone_book.sort()  # 정렬을 한다. 그러면 접두어가 같은 순서대로 정렬이 될 것이다.

    for i in range(len(phone_book)-1):
        if phone_book[i] == phone_book[i+1][:len(phone_book[i])]:  # 접두어 비교
            return False

    return True

🔔 해결 과정 & 깨달은 점

- 처음에 이중 for문으로 문제를 해결했더니, 효율성 3, 4번에서 에러가 났다. 그래서 for문을 한 번만 사용하고자 sort()를 사용했다.

- phone_book을 sort하면 사전순으로 정렬이 되기 때문에 다음과 같이 정렬이 된다. 따라서 이중 for문을 사용할 필요 없이 현재 문자열이 다음 문자열에 포함하는지만 확인하면 된다.

['119', '97674223', '1195524421'] -> ['119', '1195524421', '97674223']

- 정렬을 한 후 for문을 돌면서 현재 문자열이 다음 문자열에 있는지 확인한다. 

- 그러나 여기서 현재 문자열이 다음 문자열보다 길면 안되므로, 길이를 제한한다.

- 접두어가 나오면 바로 False를 리턴한다.

'CodingTest > Programmers' 카테고리의 다른 글

[프로그래머스] 문자열 압축  (0) 2022.04.15
Comments