프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *
으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
최종 풀이
class Solution {
fun solution(phone_number: String): String {
var answer = ""
var lastFourLetter = phone_number.takeLast(4)
var firstLetters = phone_number.dropLast(4)
var starNumber = firstLetters.map{it -> "*"}
answer = starNumber.joinToString(separator = "") + lastFourLetter
return answer
}
}
풀이 과정
class Solution {
fun solution(phone_number: String): String {
var answer = ""
var privateNumber = phone_number.replace(Regex("\\d{7}"),"*******")
answer = privateNumber
return answer
}
}
오 문자열 대체 보자마자 확장함수 공부할 때 Regex 이용해서 문자열 대체 하던게 생각나서
Regex 정리해 놓은 문서 들어가서 작성했는데
코드 테스트 해보니까 전화번호 길이가 다 달랐음…
이럴땐 안배웠는데.? 배운거 활용하겠다 싶어서 신나서 했는데
갑자기 침울해짐
class Solution {
fun solution(phone_number: String): String {
var answer = ""
var lastFourLetter = phone_number.takeLast(4)
var firstLetters = phone_number.dropLast(4)
var starNumber = firstLetters.map{it -> "*"}
answer = starNumber.joinToString(separator = "") + lastFourLetter
return answer
}
}
그래서 그냥 내가 아는 문자열함수 사용해서 풀었음
.takeLast로 lastFourLetter
에 맨 뒤 4글자만 저장해두고,
.dropLast로 firstLetters
에 맨 뒤 4글자 제외한 앞 글자들 저장하고
map으로 firstLetters
의 모든 요소를 “*” 로 변환해줌!
그 다음 answer
에 *로 변환한 문자열 starNumber
와 lastFourLetter
를 합쳐서 넣어줬당
중간에 어려웠던 부분
사실 어려웠다기보다 잠깐 틀린 부분인데
joinToString 함수를 쓸때 separator를 안썼더니 , , * 이런식으로 구분자까지 같이 문자열로 들어와버림 ;; separator 잘 이용하기~!
class Solution {
fun solution(phone_number: String): String {
return "${"".padStart(phone_number.length - 4, '*')}${phone_number.takeLast(4)}"
}
}
오 padStart를 사용할 수 도 있었나보다
근데 내가 공부한 padStart는 문자열의 길이가 length 길이보다 적으면 앞을 padChar로 변환해주는거라고 알았는데 이게 어떻게 되는거지??????
찾아보니까
빈 문자열에 padStart를 사용하고 phone_number의 length에서 4만큼을 뺀것 보다 길면, *로 치환 해준거였음!!!! 이렇게도 되는 군!
class Solution {
fun solution(phone_number: String): String {
val length = phone_number.length
if (length <= 4) return phone_number
val stars = "*".repeat(length - 4)
val lastFourDigits = phone_number.takeLast(4)
return stars + lastFourDigits
}
}
위랑 비슷하게 이렇게 할 수도 있겠당
class Solution {
fun solution(phone_number: String): String {
val regex = Regex(".(?=.{4})") // 뒤에서 4자리를 제외한 모든 문자
return phone_number.replace(regex, "*")
}
}
만약에 내가 처음 생각한 방식대로 Regex를 이용해서 풀려고 했다면
표현식을 .?=.{4}
이렇게 했어야된다고함!