출처:프로그래머스
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
}
이때부터는 그냥 구글링을 열심히 해봤던 것 같다. 스위프트 독스도 찾아보고, 배열에 대해서 찾아보기도 하고.
결국 하나하나씩 찾아서 조합했다.
점점 배웠던 것을 응용하는 문제가 하나둘씩 나오는 것 같다. 알고리즘 공부를 다시해야할 것 같은데..?
'Programmers' 카테고리의 다른 글
[iOS Swift] Lv.1 제일 작은 수 제거하기 (0) | 2024.05.18 |
---|---|
[iOS Swift] Lv.1 없는 숫자 더하기 (0) | 2024.05.16 |
[iOS Swift] Lv.1 음양 더하기 (0) | 2024.05.14 |
[iOS Swift] Lv.1 나누어 떨어지는 숫자 (0) | 2024.05.13 |
[iOS Swift] Lv.1 서울에서 김서방 찾기 (0) | 2024.05.13 |