본문 바로가기
🍎 Swift/Programmers

[👾 Programmers] 27. 핸드폰 번호 가리기

by 솔비님 2024. 7. 11.

 

1. 문제 설명 (📎Link)

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

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

 

2. 제한사항

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

 


📝 문제

func solution(_ a:Int, _ b:Int) -> Int64 {    
    return 0
}

 

 

💻 내가 푼 방법

1️⃣  먼저, 전화번호의 마지막 4자리를 제외한 문자열을 *으로 변경해 주어야 한다

앞자리가 02가 될 경우 phone_number의 count는 9이 되고, 010이 될 경우 11이 된다(즉, 일정하지 않다)

그래서 난 문자열을 뒤집어 주어서 뒤집은 문자열에서 순서대로 0, 1, 2, 3번 요소를 제외해 주기로 했다

    var str = String(phone_number.reversed())
문자열 phone_number를 reversed()를 사용해 뒤집어준 후 str 변수에 넣어준다
이때 문자열을 다시 String으로 감싸주지 않으면 str은 아래와 같이 형변환이 되어 String으로 꼭 감싸주어야 한다

 

< reversed() 를 사용해 형변환된 모습 >

그 다음 문자열 str을 배열로 만들어주기 위해 고차함수 map을 이용해서 arr1 변수에 넣어주었다

    var arr1 = str.map{String($0)}
 고차함수 map은 배열을 반환하기 때문에 따로 arr1가 배열임을 명시하지 않아도 배열로 인식된다

 

 

 2️⃣  뒤집어진 배열 arr1에서 기존 전화번호의 마지막 4자리 숫자를 뽑아서 넣기 위한 추가 배열 arr2를 선언해 주었고,

for 반복문을 통해 arr1의 3번까지 요소를 만들어준 arr2 배열에 넣어주었다

    var arr2: [String] = []
    
    for i in 0...3 {
        arr2.append(arr1[i])
    }

 

 

3️⃣  arr1에서 4만큼 빠진 count 만큼 *를 arr2에 추가해준다

    for i in 0...arr1.count-5 {
        arr2.append("*")
    }
 배열의 요소는 0부터 시작하므로 count에서 -4가 아닌 -5를 넣어야 한다

 

 

5️⃣ 마지막으로 arr2를 다시 문자열로 형변환해 준 뒤 뒤집어준다(원래 전화번호 형식대로!)

    return String((arr2.joined()).reversed())
joined()는 배열을 문자열로 변경해 주는 아주 간편한 함수다

 


전체코드

func solution(_ phone_number:String) -> String {
    var arr1 = String(phone_number.reversed()).map{String($0)}
    var arr2: [String] = []
    
    for i in 0...3 {
        arr2.append(arr1[i])
    }
    
    for i in 0...arr1.count-5 {
        arr2.append("*")
    }
    
    return String((arr2.joined()).reversed())
}
str과 arr1은 합쳐주었다

 

 


🔎 의문점과 공부한 것

1.  다 풀고나서 보니까 인덱스에 문자열의 마지막 N번째 글자를 추출해 주는 아주 좋은 함수가 있었다 ㅋㅋㅋㅋㅋ

2. 조만간 다시 풀어볼 예정이다..

 

 

인덱스 활용해서 다시 풀기