문제 출처

문제 설명

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


제한 조건
  • phone_number는 길이 4 이상, 20이하인 문자열입니다.

입출력 예
phone_number return
“01033334444” ***4444”
“027778888” “*****8888”

풀이

주어진 문자열의 마지막 4자리를 제외한 나머지 부분을 “*“로 변환하여 출력하는 문제로 문자열을 배열 형태로 변환하여 풀어봤습니다.

1
2
3
4
5
6
7
8
9
10
11
func solution(_ phone_number:String) -> String {
  var result = Array(phone_number)
    
  for i in 0..<result.count {
    if i < result.count - 4 {
      result[i] = "*"
    }
  }

  return String(result)
}
  1. 주어진 문자열을 배열형태로 변환합니다.
  2. 배열을 순회하면서 마지막 4개를 제외한 나머지 요소를 “*“로 변경합니다.
  3. 변환된 배열을 문자열 형태로 반환합니다.
실행 결과

스크린샷 2022-07-31 오후 9 53 14


다른 풀이

다른 풀이로 배열로 변환하지 않고 문자열을 이용해 풀어봤습니다.

1
2
3
4
5
6
7
8
9
10
11
func solution(_ phone_number:String) -> String {
  var result = ""
    
  for _ in 0..<phone_number.count - 4 {
    result += "*"
  }
    
  result += phone_number[phone_number.index(phone_number.endIndex, offsetBy: -4)..<phone_number.endIndex]
    
  return result
}
  1. 정답을 반환할 문자열 변수를 선언 및 초기화합니다.
  2. 주어진 문자열의 길이 -4 만큼 반복문을 실행합니다.
  3. 반복문을 실행하면서 “*“를 result 문자열에 더합니다.
  4. 주어진 문자열 뒤에 4자리 숫자를 result 문자열에 더합니다.
실행 결과

스크린샷 2022-07-31 오후 10 03 28


배열로 변환하지 않고 풀었을 때 더 빠른 결과가 나올 거라 예상했는데 반대로 나왔네요…
푸는 방법이 잘못되었을 수도… 문자열은 인덱스로 다뤄야 해서 다른 자료형보다 어려운 거 같습니다.

업데이트:

댓글남기기