ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] 프로그래머스 : 핸드폰 번호 가리기
    코딩테스트/프로그래머스 2024. 7. 16. 22:25

    [문제 풀기 전 생각한 부분]

    1. 요구사항에는 없지만, 010-1234-5678 처럼 하이픈(-)이 들어간다면 어떻게 해야될까?

    2. 01012345678의 길이는 11 027778888의 길이는 9 총 두 가지 경우에 대해서 if 문으로 해보자. 

    [my_code]

    1. 하이픈(-)이 들어간다면 replace 파이썬의 내장함수를 사용해서 제거를 해주자.

    phone_number = "02-777-8888"
    phone_number = phone_number.replace('-', '')   # 027778888
    phone_number = "02-777-8888"
    phone_number = phone_number.replace('-', '')
    
    if len(phone_number) == 11:
        print('*'*7 + phone_number[7:])
    else:
        print('*'*5 + phone_number[5:])


    [문제점]

    - 뭐가 문제일까 생각해보다 ' 02 ' 는 서울이고 그 외 지역은 031 처럼 3자리인 경우도 있으니 elif 로 추가. 

    - 테스트 케이스 8번 하나를 제외 하고 여전히 그대로다. 

    - 1111-1111 8자리도 존재한다. 

    - 이쯤 되니 예외를 생각하기 보단 뒷 4자리를 제외하고 앞자리 번호를 *로 바꾸는 게 더 빨라보인다. 

    phone_number = "02-777-8888"
    phone_number = phone_number.replace('-', '')
    
    for i in range(len(phone_number)-4):
        phone_number = phone_number.replace(phone_number[i],'*')
    
    print(phone_number)
    
    # 출력결과 
    *****8888
    ** *** 8888 (가독성을 위해 띄어쓰기를 포함한 결과를 첨부합니다.)

    - 테스트 케이스 결과가 더 처참해졌다. 

    - 아래와 같이 테스트를 해봤을 때, 맨 마지막 인덱스가 *로 출력된다. 왜 그럴까?

    phone_number = "031-777-4567"
    phone_number = phone_number.replace('-', '')
    
    for i in range(len(phone_number)-4):
        phone_number = phone_number.replace(phone_number[i],'*')
    
    print(phone_number)
    
    
    # 출력결과
    ******456*
    *** *** 456*

    - replace 함수를 사용했을 때, phone_number[i] 가 7일 때, 모든 7을 *으로 바꿔주기 때문에 발생한 문제.

     

    [문제점 해결]

    - replace 대신 인덱싱을 사용해서 출력해보자.

    phone_number = "031-777-4567"
    phone_number = phone_number.replace('-', '')
    
    protected_phone_number = '*' * (len(phone_number)-4) + phone_number[-4:]
    
    print(protected_phone_number)

     

    [프로그래머스 최종 제출 코드]

    def solution(phone_number):
        protected_phone_number = '*' * (len(phone_number)-4) + phone_number[-4:]
    
        return protected_phone_number

     

    [실수를 통해 배운 점]

    1. 모든 예외를 다 생각할 순 없다.

    2. 그렇다면 어떻게 하면 모든 예외를 생각하지 않아도 예외처리할 수 있는 방법을 생각해보자. 

     

    +

    문제에서 요구하는 것 이외에도 다른 문제를 만들어 낸 점은 잘했다.

    다양한 시도를 할 수 있는 방법을 배웠다.  

     

Designed by Tistory.