반응형
입력 & 출력
문제는 링크에서 확인 바랍니다
풀이
문제에선 풀어나갈 방법을 순서대로 제시한다
3단계를 풀기 위해서 재귀를 사용했고
4단계는 반복기에 함수로 만들었다
+
대문자를 소문자로 바꾸는 것은 string.lowercased() 이며
소문자를 대문자로 바꾸는 것은 string.uppercased() 이다
문자열 안의 요소가 숫자인지 확인하는 방법은 s.isNumber 이며
문자열 안의 요소가 문자인지 확인하는 방법은 s.ASCII 와 s.isLetter 이다
Swift 전체 코드
import Foundation
func solution(_ new_id:String) -> String {
var array = ""
var i = 0
var filtered = ""
func checkPointPosition() {
if filtered.first == "." {
filtered.removeFirst()
}
if filtered.last == "." {
filtered.removeLast()
}
}
func checkMultiPoint(j: Int){
let index = array.index(array.startIndex, offsetBy: j)
if array[index] == "." {
i += 1
if j < array.count - 1{
checkMultiPoint(j: j + 1)
}
}
}
for i in new_id {
let a = i.lowercased()
if a == "-" || a == "_" || a == "." || i.isNumber || i.isLetter {
array.append(a)
}
}
while i < array.count {
let index = array.index(array.startIndex, offsetBy: i)
filtered.append(array[index])
if array[index] == "." && i + 1 < array.count {
checkMultiPoint(j: i + 1)
}
i += 1
}
checkPointPosition()
if filtered.count < 3 {
if filtered.isEmpty {
filtered.append("a")
}
let last = filtered.last!
for _ in 0..<3 - filtered.count {
filtered.append("\(last)")
}
}
if filtered.count >= 16 {
let range = filtered.index(filtered.startIndex, offsetBy: 15)
filtered.removeSubrange(range...)
}
checkPointPosition()
return filtered
}
반응형
'개발 > 알고리즘' 카테고리의 다른 글
[프로그래머스] 스택/큐 - 프린터 (0) | 2021.04.07 |
---|---|
[프로그래머스] 2021 Kakao Blind Recruitment - 합승 택시 요금 (0) | 2021.04.06 |
[프로그래머스] 2020 Kakao Blind Recruitment - 문자열 압축 (0) | 2021.04.02 |
[프로그래머스] 두 개 뽑아서 더하기 (0) | 2021.04.01 |
[프로그래머스] 2019 Kakao Winter Internship - 크레인 인형뽑기 게임 (0) | 2021.04.01 |