문제 설명
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
제한 조건
- phone_number는 길이 4 이상, 20이하인 문자열입니다.
입출력 예
내가 푼 방법
fun solution(phone_number: String): String {
val hiddenPosition = phone_number.length - 4
return phone_number.mapIndexed { index, number -> if (index<hiddenPosition) "*" else number}.joinToString("")
}
큰 고민없이 풀었더니 점수가 낮았고 역시 시간이 많이 걸렸습니다.
다른 사람이 푼 코드도 참고하고 몇가지 첨삭 코드를 테스트해봤는데 크게 효율적이지 않았고 마지막으로 코드첨삭을 받아봤을때 StringBuilder() 를 사용해봤다. 그리고 확연히 테스트를 진행했을때 줄어든 시간을 확인했다. 코드는 조금 더 길어지지만, 시간은 100배 이상 차이 났다.
코드 첨삭
fun solution(phone_number: String): String {
val hiddenPosition = phone_number.length - 4
val result = StringBuilder()
for (i in 0 until hiddenPosition) {
result.append('*')
}
for (i in hiddenPosition until phone_number.length) {
result.append(phone_number[i])
}
return result.toString()
}
StringBuilder 가 문자열을 새성하는데 매우 효율적임을 이제(?) or 다시(?) 알게되었습니다. 물론 과거게 알았을수도 있지만 지금 머릿속에 관련 지식이 없습니다.
StringBuilder
- 장) 가변 길이의 문자열을 생성하기 위해 내부적으로 배열을 사용.
- 장) 즉 문자열 변경 할때, 새로운 메모리 할당을 반복적으로 하지 않아도 된다는 것
- 단) String 클래스는 불변(immutable)이라 문자열을 변경할 때마다 새로운 문자열 객체를 생성
- 단) 메모리 사용량이 증가 GC(Garbage Collection)가 자주 발생
반응형
'Dev > Algorithm' 카테고리의 다른 글
간만의 알고리즘 공부 - 18 (내적) (0) | 2024.07.17 |
---|---|
간만의 알고리즘 공부 - 17 (핸드폰 번호 가리기) (0) | 2024.07.17 |
간만의 알고리즘 공부 - 15 (제일 작은 수 제거하기) (0) | 2024.07.14 |
간만의 알고리즘 공부 - 14 (없는 숫자 더하기) (0) | 2024.07.10 |
간만의 알고리즘 공부 - 13 (음양 더하기) (0) | 2024.07.10 |