728x90
조건 : 프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
알고리즘 예상
1. phone_number의 각 element에 대해 가장 뒤 4글자를 제외하고 *로 바꾼다.
2. answer에 2번을 String형으로 저장한다.
초기코드
class Solution {
fun solution(phone_number: String): String {
var answer = ""
return answer
}
}
내 코드
class Solution {
fun solution(phone_number: String): String {
var answer = ""
phone_number.forEachIndexed{idx, c -> if(phone_number.length - idx > 4) answer+="*" else answer+=c }
return answer
}
}
다른 사람의 풀이
class Solution {
fun solution(phone_number: String): String {
return "${"".padStart(phone_number.length - 4, '*')}${phone_number.takeLast(4)}"
}
}
class Solution {
fun solution(n: String) = "*".repeat(n.length-4) + n.slice(n.length -4 until n.length)
}
개선점 및 배운점
1. 아직 코드 블럭 없는 조건문 사용을 잘 못하겠다. .foldIndexed()를 사용했어도 됐을까?
2. .padStart(얼마나,무엇을), .takeLast(얼마나) .slice(범위) . repeat(얼마나) 등 처음 본 함수들이 많다. 이름에서 어떤 기능인지는 유추할 수 있고 찾아보았더니 대충 비슷했다.
개선한 코드
class Solution {
fun solution(phone_number: String) = phone_number.foldIndexed(""){idx, acc, c -> acc + if(phone_number.length - idx > 4)"*" else c }
}
.foldIndexed를 사용해도 정상적으로 코드가 작동했다. 코드를 바꾸니 처리속도가 12~17ms 에서 2~4ms로 줄었다.
728x90
'TIL > 알고리즘' 카테고리의 다른 글
| 02/05 알고리즘 공부(29) - 가장 작은 수 제거하기 (0) | 2024.02.05 |
|---|---|
| 02/02 알고리즘 공부(28) - 없는 숫자 더하기 (0) | 2024.02.02 |
| 02/02 알고리즘 공부(26) - 음양 더하기 (1) | 2024.02.02 |
| 02/02 알고리즘 공부(25) - 나누어 떨어지는 숫자 배열 (0) | 2024.02.02 |
| 02/01 알고리즘 공부(24) - 서울에서 김서방 찾기 (0) | 2024.02.01 |