(알고리즘) 핸드폰 번호 가리기

2024. 4. 28. 18:05TIL

신나는 주말!

주말에는 간단한 알고리즘 문제를 풀어보자!

 

🔥알고리즘 문제

 

문제 설명

프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.

제한 조건
  • phone_number는 길이 4 이상, 20이하인 문자열입니다.
입출력 예
phone_number return
"01033334444" "*******4444"
"027778888" "*****8888"

내가 작성한 코드 

class Solution {
    fun solution(phone_number: String): String {
        var phone_number_length=phone_number.length
        var answer = "*".repeat(phone_number_length-4) +phone_number.substring(phone_number_length-4,phone_number.length )
        return answer
    }
}

 

내가 작성한 코드 해석

1. 뒤에 4자리를 제외하고 *표시를 해야하기 때문에 phone_number.length(전체길이) 에서 4를 뺀 만큼의 수만큼 *를 반복하기 위해 .repeat()함수를 사용

2. 마지막 4자리는 *표시 없이 그대로 출력하면 되기때문에 substring()함수 사용

 

다른사람은 어떻게 했을까?

class Solution {
    fun solution(phone_number: String): String {
        return "${"".padStart(phone_number.length - 4, '*')}${phone_number.takeLast(4)}"
    }
} // 진*훈 , 박*근 , 정*희 님의 코드 입니다

 

다른사람이 작성한 코드 해석

1. return값으로 ""(큰 따옴표)를 반환함
return "${"".padStart(phone_number.length - 4, '*')}${phone_number.takeLast(4)}"


2. ""안에  ${"".padStart(phone_number.length - 4, '*')}${phone_number.takeLast(4)}가 있는 형태
return "${"".padStart(phone_number.length - 4, '*')}  ${phone_number.takeLast(4)}"

3. ${}를 사용함으로서 문자열 안에 변수나 식의 값을 넣을수 있음. 즉 빈 문자열 ""에 .padStart(phone_number.length - 4, '*')를 적용시킨 값이 그 안에 들어가 있음
return "${"".padStart(phone_number.length - 4, '*')}${phone_number.takeLast(4)}"

4. padStart()함수는 현재 문자열의 앞 부분에 지정된 길이만큼 다른 문자를 채워 넣어주는 역할을 함.
그러므로 여기서는 "*" 라는 문자를 phone_number.length-4(전체길이에서 4개만 제외한) 만큼 대체함
return "${"".padStart(phone_number.length - 4, '*')}${phone_number.takeLast(4)}"

5. takeLast() 함수는 리스트나 문자열에서 뒤에서부터 지정된 개수만큼의 요소나 문자열을 가져오는 함수.
여기서는 phone_number.takeLast(4)를 사용하여 맨뒤에서부터 4개만큼의 문자열을 가져오게 됨
return "${"".padStart(phone_number.length - 4, '*')}${phone_number.takeLast(4)}"

6.  return으로 문자열 반환
return "${"".padStart(phone_number.length - 4, '*')}${phone_number.takeLast(4)}"

 

이런 방법이.....

 

더 개선해야할 Point

문자열 사이에 "${}" 를 사용하는것은  println()을 사용할때만 활용했었는데 이렇게도 활용할수 있다는 점을 새롭게 알게 되었다. 똑같은 문제를 정말 다양한 방법으로 풀수 있다는것이 매우 놀랍다!! 

 

알고리즘 Github : https://github.com/kotlin2024/algorithm/commit/c28ef90daeec1e0c260cb427d6cfdb8eae7868a1

 

 

 

 

 

 

 

'TIL' 카테고리의 다른 글

고차함수와 람다식  (0) 2024.04.30
Enum class  (0) 2024.04.29
(알고리즘) 나누어 떨어지는 숫자 배열  (0) 2024.04.27
여러작업을 한번에 수행하자  (0) 2024.04.26
Test Code 작성을 생활화 합시다  (0) 2024.04.25