본문 바로가기

Algorithm/Programmers lv.1

[프로그래머스] 핸드폰 번호 가리기(range 활용, join함수로 문자열을 리스트로 변환, 문자열 다루기)

https://school.programmers.co.kr/learn/courses/30/lessons/12948

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

처음에는 다음과 같이 풀었다. 하지만 에러가 떠버린다.

phone_number = "01033334444"

num_list = list(map(int, str(phone_number)))

for i in range(-1, -5, -1):
    num_list[i] = "*"

result = ''.join(num_list)

print(result)

 

핸드폰 번호 가리기.py", line 21, in <module>
    result = ''.join(num_list)
             ^^^^^^^^^^^^^^^^^

 

join 함수는 문자열을 리스트로 바꿔주는 역할을 하는데, 반복문을 지나면서 정수와 문자열 자료형이 섞여버리면서 문제가 생긴 것이다. 따라서 다음과 같이 고쳐준다.

 

phone_number = "01033334444"

num_list = list(phone_number)

for i in range(-1, -5, -1):
    num_list[i] = "*"

result = ''.join(num_list)

print(result)

 

이렇게 하니깐 출력이 잘 된다! 하지만.. 내가 문제를 잘못 이해하고 있었다. 마지막 4자리를 별표처리 하는 것이 아니라, 4자리를 제외한 나머지를 전부 별표처리 하는 것이었다.. 그래서 코드를 다시 고쳐줬는데, 사실 반복문만 좀 고쳐주면 된다.

 

def solution(phone_number):
    num_list = list(phone_number)

    for i in range(0, len(phone_number) - 4):
        num_list[i] = "*"

    result = ''.join(num_list)

    return result

 

최종적으로는 위와 같이 해야 잘 통과가 된다. 반복문을 어떻게 처리했는지 잘 관찰하자.

 

그리고, 다른 사람들의 풀이를 찾아봤는데.. 역시나 한줄 풀이가 존재한다. 프로그래머스에는 고수들이 참 많은 듯 하다.

 

def hide_numbers(s):
    return ('*'*(len(s)-4)) + s[-4:]

 

이렇게나 간단히 쓸 수 있는 문제였다니 ㅋㅋ