2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

[Swift] Programmers - 핸드폰 번호 가리기

2024. 3. 6. 10:37ㆍIOS/Swift-Algorithm (Programmers)
SMALL

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

* 핸드폰 번호 가리기 *

프로그래머스 모바일은 개인정보 보호를 위해

고지서를 보낼 때 고객들의 전화번호의 일부를 가리는데

전화번호가 문자열 phone_number 주어졌을 ,

전화번호의 4자리를 제외한 나머지 숫자를

전부 "*"으로 가린 문자열을 리턴하는 함수, solution 완성하라.

* 제한사항 *

phone_number 길이 4 이상, 20이하인 문자열

 

* 알고리즘 분석과 이해 *

먼저, 이 알고리즘의 시작으로 주어진 전화번호의 길이를 파악하여

뒤에서 4자리를 제외한 부분의 길이를 계산해야겠고

이를 통해 가려야 할 숫자의 개수를 구해주어야겠죠?!

그리고

계산된 길이만큼 '*'를 반복하여 가려진 부분을 생성하고

 

주어진 전화번호에서 뒤에서 4자리를 제외한 부분을 추출하고,

앞에서 생성한 가려진 부분과 결합하여 전체 전화번호를 가리면 되겠습니다.

* 로직구상 *

문자열 길이 계산

문자열의 길이를 계산하기 위해서 "count" 속성을 사용하는게 좋을 것 같습니다.

"count" 속성으로 문자열에 포함된 문자의 개수를 반환합니다.

이 연산은 주어진 문자열의 길이를 파악하는 데 필요합니다.

길이를 알면 뒤에서 4자리를 제외한 부분의 길이를 계산할 수 있으니까요 

 

문자열 추출

문자열에서 특정 부분을 추출하기 위해 prefix(_:)와 suffix(_:) 메소드를 사용해볼까요?!

prefix(_:) 메소드는 문자열의 앞부분부터 지정된 길이까지의 문자열을 반환해요

이 메소드를 이용해서 뒤에서 4자리를 제외한 부분을 추출해 보도록 하고

suffix(_:) 메소드는 문자열의 뒷부분부터 지정된 길이까지의 문자열을 반환해요

이 메소드를 이용해서 가려지지 않는 부분을 추출하도록 합시다.

 

문자열 반복

특정 문자를 반복하여 문자열을 생성하기 위해 "repeating: count:" 생성자를 사용하고

이를 이용해서 '*' 문자를 뒤에서 4자리를 제외한 부분의 길이만큼 반복하여 가려진 부분을 생성해요.

 

문자열 연결

두 개 이상의 문자열을 결합해서 새로운 문자열을 생성하기 위해 '+' 연산자를 사용합니다.

이를 이용하여 가려진 부분과 가려지지 않는 부분을 합쳐 전체 전화번호를 완성한 반환해줍시다.

* 코드구성 *

func solution(_ phoneNumber: String) -> String {

solution이라는 함수를 정의하고, 매개변수로 전화번호 문자열을 받아줍시다.

    let length = phoneNumber.count // 전체 전화번호 길이

전체 전화번호의 길이를 구하기 위해서 "length"라는 상수를 선언 해주고

그 안에 정의된 문자열 전화번호 매개변수를 넣어주는데

그 전화번호의 길이를 계산하기 위해서 "count" 속성을 사용해줍시다.

    let visibleLength = length - 4 // 뒤에서 4자리를 제외한 부분의 길이

뒤에서 4자리를 제외한 부분의 길이를 계산하기 위해서

visibleLength 상수를 선언해주고 그 안에 우리가 위에서

전화번호 길이를 계산한 상수가 있었죠?!

그렇게 계산한 전화번호의 길이에서 4자리를 제외하기 위해서

-4 를 해주도록 합시다.

    // 뒤에서 4자리를 제외한 부분 추출
    let visiblePart = String(phoneNumber.suffix(4))

그렇다면 이제는 뒤에서 4자리를 제외한 부분을 추출 해야하겠죠?!

전화번호 문자열에서 뒤에서 4자리를 추출해서 상수 "visiblePart" 저장해줍시다.

부분은 숨겨지지 않는(가려지지 않는) 전화번호 부분이에요.

    // 가려진 부분 생성
    let hiddenPart = String(repeating: "*", count: visibleLength)

그리고

뒤에서 4자리를 제외한 부분의 길이만큼 '*' 이루어진 문자열을 생성해 줍시다.

부분은 가려진 전화번호 부분을 의미해요.

    // 전화번호 가리기 후 반환
    return hiddenPart + visiblePart

가려진 부분과 가려지지 않는 부분을 합쳐 전체 전화번호를 완성한 반환하면,

목표인 핸드폰 번호를 가릴 수 있죠.

 

총 코드

func solution(_ phoneNumber: String) -> String {
    let length = phoneNumber.count // 전체 전화번호 길이
    let visibleLength = length - 4 // 뒤에서 4자리를 제외한 부분의 길이
    
    // 뒤에서 4자리를 제외한 부분 추출
    let visiblePart = String(phoneNumber.suffix(4))
    
    // 가려진 부분 생성
    let hiddenPart = String(repeating: "*", count: visibleLength)
    
    // 전화번호 가리기 후 반환
    return hiddenPart + visiblePart
}
728x90