[알고리즘] Swift 핸드폰 번호 가리기

이유진·2024년 3월 27일
0

알고리즘

목록 보기
27/32

문제 설명

프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.

전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.


제한 조건

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

입출력 예

phone_numberreturn
"01033334444""***4444"
"027778888""*8888"

풀이 과정

phone_number의 뒷자리 4개를 구하고,
4개 제외한 글자의 수를 세서 *로 변환하도록 하자! 생각하고 시작했다.

우선 뒷자리 4개를 구하기 위한 방법을 찾아보다가,
’suffix’ 메서드를 알게 되었다.

suffix
문자열의 끝에서부터 지정된 길이의 부분 문자열을 추출할 수 있는 메서드

그리고 뒷자리 4개를 제외한 수를 카운팅 해서 *로 변환하기 위한 방법을 찾다가
알게된 ‘repeating: , count: ‘ 형식!

repeating: , count:
문자열 초기화 방법. 특정 문자를 지정된 횟수만큼 반복하여 문자열을 생성할 수 있다.

사용한 요소들에 대한 간단한 설명이 끝났으니 적용 시켜보자 :>

  1. suffix(4)를 사용하여 전화번호의 뒷자리 4개를 추출한다.
  2. 전체 전화번호 문자열의 길이를 count 메서드를 통해 구한 후, 여기서 4를 빼줍니다. 이를 통해 필요한 *의 개수를 구한다.
  3. repeating 메서드를 사용하여 필요한 *의 개수만큼 **** 문자를 반복하여 생성한다.
  4. 생성된 *와 전화번호의 뒷자리 4개를 합쳐서 반환한다.

Solution

func solution(_ phone_number:String) -> String {
    
    let end = phone_number.suffix(4)
    let change = String(repeating: "*", count: phone_number.count - 4)
    
    return change + end
}

이렇게 각각 상수에 담아준 후 반환할 때 합쳐줬다!

상수에 담지 않고 바로 반환하면 이렇게 한 줄로 줄일 수도 있다.

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

나는 상수에 담아 정리한 게 깔끔해 보이고 이해하기 더 좋은 것 같다!..!(지극히 주관적)

2개의 댓글

comment-user-thumbnail
2024년 3월 27일

오 저도 이 문제 풀 때 딱 suffix와 prefix를 처음 만났습니다!! 반갑네요 ㅎㅎ 아 물론 아는 건 없습니다 ㅎ 오늘 하루도 고생하셨어요!! 내일도 파이팅입니다 ㅎㅎㅎ

답글 달기
comment-user-thumbnail
2024년 3월 27일

아.. 저거 할줄몰라서 수십줄 써서 겨우 풀었던 경험이 있네요 ㅋ

천천히 학습 하시면서 페이스 유지 하시고 담주엔 아마.. 심미적인 부분에 도움요청하러 자주 요청드릴것 같습니다 ㅋㅋ..

디자인적인 요소 잘 부탁드립니다.....ㅠㅠ

답글 달기