Programmers

[iOS Swift] Lv.1 핸드폰 번호 가리기

pockpock 2024. 5. 15. 22:41
출처:프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/12948
난이도:Lv.1

 

문제 설명

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

 

제한 조건

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

입출력 예

phone_number return
"01033334444" "*******4444"
"027778888" "*****8888"

1차 시도 (실패)

 내가 처음으로 접근했던 방법은 phone_number의 길이가 11일 경우 앞에서부터 7번 째 배열까지 모두 "*"로 채우고 그게 아닐경우 5번 째 배열까지 "*"로 채운후에 나머지 뒤에 4개의 번호를 불러오려고 시도했었다.
 이 코드의 문제점은 문자의 길이가 11개, 9개일 경우를 제외하고는 모두 배제했다는 점 이다. (날로 먹으려다 망함)
func solution(_ phone_number: String) -> String {
    if phone_number.count == 11 {
        let pn1 = phone_number
        let swap = pn1.replacingOccurrences(of: String(pn1.prefix(7)), with: "*******")
        return swap
    } else {
        let pn2 = phone_number
        let swap2 = pn2.replacingOccurrences(of: String(pn2.prefix(5)), with: "*****")
        return swap2
    }
}

 

2차 시도 (실패)

 두 번째 방법으로는 count라는 변수에 phone_number의 배열의 길이에 -4 를 한 값 만큼 "*"을 새로운 변수에 집어넣고  나머지 값을 불러오도록 시도해 보았다. 
 let count = phone_number.count - 4
    // let pn = phone_number
     var star: [String] = []
    
    for i in 0..<count{
        star[i] = count.append("*")

대충 요런느낌으로다가 하고싶었는데 너무 안 풀려서 지피티의 도움을 받기로 했다.

역시... 입구 컷 ㅠㅠ 새로운 방법을 찾아봐야겠다!

 

3차 시도 (성공)

func solution(_ phone_number: String) -> String {
    let count = phone_number.count - 4

    // 전화번호에서 마지막 네 자리를 가져옴
    let lastFourDigits = String(phone_number.suffix(4))

    // ''로 구성된 문자열 생성
    let stars = String(repeating: "", count: count)

    // '*'로 구성된 문자열과 마지막 네 자리를 결합하여 반환
    return stars + lastFourDigits
}

 이때부터는 그냥 구글링을 열심히 해봤던 것 같다. 스위프트 독스도 찾아보고, 배열에 대해서 찾아보기도 하고.

결국 하나하나씩 찾아서 조합했다.

 점점 배웠던 것을 응용하는 문제가 하나둘씩 나오는 것 같다. 알고리즘 공부를 다시해야할 것 같은데..?