티스토리 뷰

728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/12948

 

코딩테스트 연습 - 핸드폰 번호 가리기

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

programmers.co.kr

 


 

<나의 풀이>

func solution(_ phone_number:String) -> String {
	// 제한 조건
    if phone_number.count < 4 || phone_number.count > 20 {
        return ""
    }
    
    // 문자열의 맨 뒤에서 4번째 인덱스를 가져옴
    // (index 메서드를 사용하면 문자열도 배열처럼 사용할 수 있다!)
    let index = phone_number.index(phone_number.endIndex, offsetBy: -4)
    
    // 가져온 전화번호의 뒷 4자리를 제외한 숫자 개수만큼 *로 처리 하고, 뒷 4자리를 붙여줌
    var result = String(repeating: "*" , count: phone_number.count - 4) + phone_number[index...]
    
    return result
}

 


 

<다른 사람의 풀이>

 

func solution(_ phone_number:String) -> String {
    return String("\(String(repeating: "*", count: phone_number.count - 4))\(phone_number.suffix(4))")
}

- suffix(_:)

- 덧셈연산자(+)가 아닌, 문자열보간법으로 문자들을 이어준 점이 신기했다!

 

func solution(_ phone_number:String) -> String {
    guard phone_number.count > 4 else { return phone_number }
    return String(phone_number.enumerated().map{($0.offset<phone_number.count-4 ? Character("*") : $0.element)})
}

// -----------------------
// offset이 무엇인지 찍어보자!
// -----------------------

print(phone_number.enumerated().map{$0.offset}) // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

- offset을 사용하면 해당 인자의 인덱스 배열을 알 수 있다.

- 반대로 element를 사용하면 해당 인자 값을 가져올 수 있다.

728x90
반응형
댓글