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
}
'IOS > Swift-Algorithm (Programmers)' 카테고리의 다른 글
[Swift] Programmers - 제일 작은 수 제거하기 (0) | 2024.03.08 |
---|---|
[Swift] Programmers - 없는 숫자 더하기 (0) | 2024.03.07 |
[Swift]Programmers - 음양 더하기 (2) | 2024.03.05 |
[Swift]Programmers - 나누어 떨어지는 숫자 배열 (0) | 2024.03.04 |
[Swift]Programmers - 서울에서 김서방 찾기 (0) | 2024.02.29 |