<로직 고민>
- 첫 번째 풀이
- 처음에는 replace를 써보려고 했는데..바꿔지는 문자를 특정할 수가 없어서...
- 그냥 for문을 돌리기로 했다
- for문을 phone_number 길이에서 -4한 수만큼 돌리면서 answer에 *을 더하고
- for문이 다 돌면 phone_number에 뒷 4자리를 마저 더해준다 끝
- 이렇게 했더니 풀리긴 풀렸는데...1점밖에 안 나오네....더 고민해볼까..?
- 두 번째 풀이
- 처음 생각했던 replace를 써보기로 했다
- 바꿔질 문자열은 슬라이싱을 이용했다
- 원래도 슬라이싱을 쓰려고 했는데 처음에는 phone_number[:-4].replace() 이렇게 썼는데 이렇게 하니까 바꿔질 문자열을 뭘 해야 하나 싶어서 포기했었다
- 근데 지금 생각해보니까 그냥 phone_number[:-4] 이거 고대로 replace 첫 번째 매개변수로 넣어도 되지 않았나 싶기도 하고
- 이렇게 하고 바꿀 문자열은 "*"을 썼는데 그렇게 하니까 *4444, *8888이 나왔다
- 그래서 세 번째 매개변수를 줘야 하나 싶어서 세 번째 매개변수로 len(phone_number)-4를 했는데 바꿔질 문자열이 그냥 통째여서 하나하나씩 바뀌는 게 아닌 것 같다
- 바꿀 문자열인 *의 개수를 미리 변수에 정의해야겠단 생각이 들었다
- star라는 변수에 phone_number 길이에서 -4 한 만큼의 *을 담으려고 정석 for문을 쓰자니 첫 번째 풀이와 별반 다르지 않을 것 같아 한 줄로 작성했다
- 그렇게 star를 정의해서 replace함수의 두 번째 매개변수에 넣었다
- 세 번째 풀이
- 두 번째 풀이와의 속도 차이를 실험해 보기 위해 작성해봤다
- 유의미한 차이가 있진 않았다
<완성된 코드>
- 첫 번째 풀이
def solution(phone_number):
answer = ""
for i in range(len(phone_number)-4):
answer += "*"
answer += phone_number[-4:]
return answer
- 두 번째 풀이
def solution(phone_number):
star = "".join(["*" for _ in range(len(phone_number) - 4)])
answer = phone_number.replace(phone_number[:-4], star)
return answer
- 세 번째 풀이
def solution(phone_number):
star = ""
for _ in range(len(phone_number) - 4):
star += "*"
answer = phone_number.replace(phone_number[:-4], star)
return answer
<다른 사람 풀이>
- 천재풀이1
def solution(phone_number):
return "*" * (len(phone_number) - 4) + phone_number[-4:]
- 2번째 풀이할 때 star에 *을 len(phone_number)-4) 만큼 곱해서 넣으려는데 str랑 int는 셈이 안 된다고 나와서 못 했다..
- 근데 그냥 이렇게 하면 되는구나,,,,,
- 또 이렇게 한 번 지고 배워간다...쩝
def solution(phone_number):
star = "*" * len(phone_number) - 4
answer = phone_number.replace(phone_number[:-4], star)
return answer
- 아,,,지금 해보니까 내가 괄호를 안 넣어서 그런 거였다,,,
star = "*" * (len(phone_number) - 4)
- 이렇게 수정하니까 잘 되네...! 후,,,,,
- 여튼 이렇게 하나 join 써서 이러쿵저러쿵 하나 저 한줄코딩은 못 이기겠다 ㅋㅋ