문제 설명 |
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호 일부를 가립니다. 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요. |
제한 조건 |
|
입출력 예 | |
phone_number | return |
"01033334444" | “*******4444” |
"01022228888" | “******8888” |
나의 풀이
1. answer에 phone_number에서 4자리가 빠진 길이만큼 *을 추가
2. phone_number에서 마지막 4자리를 answer에 더해주고 리턴
class Solution {
fun solution(phone_number: String): String {
var answer = ""
for (i in 0..phone_number.length-5) answer += "*"
answer += phone_number.substring(phone_number.length-4 until phone_number.length)
return answer
}
}
좀 더 간결하고 깔끔하게 짜고 싶었으나 이게 최선... |
Kotlin1 코드 정리
class Solution {
fun solution (phone_number: String): String {
var answer = ""
for ((i,c) in phone_number.withIndex()) {
if (phone_number.length-4 <= i) { // i : 배열 자릿수 [0],[1]… 의미
answer += c // c는 전화번호
} else {
answer += "*"
}
}
return answer
}
}
for문을 사용할 때 인자를 (i,c) 이렇게 두개를 사용해본 적이 없어서 신박 |
Kotlin2 코드 정리
1. mapIndexed()를 이용하여 리턴
2. phone_number의 index가 phone_number.length-5보다 작으면 "*", 크면 phone_number의 개체 리턴
class Solution {
fun solution (phone_number: String): String {
return phone_number.mapIndexed { // index : 자릿수 [0],[1]… c : 전화번호
index, c -> if(phone_number.length-5 < index) c else '*'
}.joinToString(separator="")
}
}
* map() : 집합 객체의 데이터 수만큼 반복하여 실행하는 것이 동일하나 forEach()와 유사하나 forEach()와는 다르게 반환값이 있음
* mapIndexed() : map() 함수와 동일하지만 람다 함수에 인덱스까지 전달해주는 함수
'프로그래머스 > Kotlin | Level1' 카테고리의 다른 글
[프로그래머스/Kotlin]Level1 - 이상한 문자 만들기 (0) | 2021.09.17 |
---|---|
[프로그래머스/Kotlin]Level1 - 자연수 뒤집어 배열로 만들기 (0) | 2021.09.17 |
[프로그래머스/Kotlin]Level1 - 행렬의 덧셈 (0) | 2021.09.15 |
[프로그래머스/Kotlin]Level1 - 가운데 글자 가져오기 (0) | 2021.08.25 |
[프로그래머스/Kotlin]Level1 - 최대공약수와 최소공배수 (0) | 2021.08.25 |