일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Method
- Xcode
- Protocol
- Terminal
- enum
- Class
- Foundation
- IOS
- extension
- delegate
- 코딩테스트
- 디자인패턴
- String
- interpace
- Git
- instance
- 이니셜라이저
- initializer
- struct
- Unicode
- 스위프트
- property
- optional
- tuist
- Swift
- initalizer
- url
- UIKit
- type
- init
Archives
- Today
- Total
아리의 iOS 탐구생활
[Swift/프로그래머스] 신규 아이디 추천 본문
반응형
문제가 아주 친절하다. 1단계부터 7단계까지 순서가 나열되어 있는데, 단계별로 차근차근 구현해보는 문제이다.
Swift의 문자열을 잘 다루는 편이라면 그다지 어렵진 않은 문제다.
한꺼번에 많은 것을 하려고 하지말고 단계별로 구현해보는 것을 추천한다.
힌트
String 관련 메소드를 활용하면 쉽게 풀수 있다.
더보기
func solution(_ new_id:String) -> String {
var newID = ""
// 1단계: 소문자로 치환하기
let lowercase = new_id.lowercased()
// 2단계 소문자, 숫자, 특수문자(-, _, .)를 제외한 모든 문자 제거
for c in lowercase {
if c.isLowercase || c.isNumber || "-" == c || "_" == c || "." == c {
newID += String(c)
}
}
// 3단계: 마침표 2개이상 반복되는 경우 1개로 치환하기
while newID.contains("..") {
newID = newID.replacingOccurrences(of: "..", with: ".")
}
// 4단계: 마침표가 처음이나 끝에 위치한다면 제거하기
newID = newID.trimmingCharacters(in: ["."])
// 5단계: 빈문자열이라면 "a" 대입하기
if newID.count == 0 {
newID = "a"
}
// 6단계: 16자 이상이라면 15자 제외하고 모두 제거, 마침표가 끝에 위치하면 그것또한 제거
if newID.count > 15 {
newID = String(newID.prefix(15))
if newID.last == "." {
newID = String(newID.dropLast())
}
}
// 7단계: 아이디 길이가 2자 이하라면 마지막 문자를 3이 될때까지 반복하여 붙힌다.
if newID.count <= 2 {
while newID.count < 3 {
newID += String(newID.last!)
}
}
return newID
}
반응형
'Swift > 알고리즘' 카테고리의 다른 글
[Swift/프로그래머스] 소수 만들기 (0) | 2021.09.16 |
---|---|
[Swift/백준] 2167번 동적 프로그래밍(dp)으로 풀이 (0) | 2021.08.04 |
Comments