Archive/Questions
[programmers/Swift] 신규 아이디 추천 (2021 Kakao Blind Recruitment)
Marco
2022. 5. 11. 00:54
728x90
programmers.co.kr - 코딩테스트연습 - Lv.1 - 2021 Kakao Blind Recruitment - 신규 아이디 추천
코딩테스트 연습 - 신규 아이디 추천
카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로
programmers.co.kr
Constraints :
- new_id는 길이 1 이상 1,000 이하인 문자열입니다.
new_id는 알파벳 대문자, 알파벳 소문자, 숫자, 특수문자로 구성되어 있습니다.
new_id에 나타날 수 있는 특수문자는 -_.~!@#$%^&*()=+[{]}:?,<>/ 로 한정됩니다.
//
// Created by Yongwoo Marco on 2022/05/06.
// Copyright © 2022 Yongwoo Marco Kim. All rights reserved.
//
func solution(_ new_id:String) -> String {
let phaseOne = new_id.map{ Character($0.lowercased()) }
let phaseTwo = phaseOne.filter{ $0.isLetter || $0.isNumber || $0 == "-" || $0 == "_" || $0 == "." }
let phaseThree = phaseTwo.map{ String($0) }.reduce(""){ first, added in
if let last = first.last, last == ".", added == "." {
return first
} else {
return first + added
}
}
let phaseFour = phaseThree.trimmingCharacters(in: ["."])
let phaseFive = phaseFour.isEmpty ? "a" : phaseFour
let phaseSix = phaseFive.count > 15 ? ( Array(phaseFive)[14] == "." ? Array(phaseFive)[0..<14].map{ String($0) }.joined() : Array(phaseFive)[0..<15].map{ String($0) }.joined() ) : phaseFive
var phaseSeven = phaseSix
while phaseSeven.count < 3 {
phaseSeven.append(phaseSeven.last!)
}
return phaseSeven
}
print(solution("...!@BaT#*..y.abcdefghijklm")) // "bat.y.abcdefghi"
print(solution("z-+.^.")) // "z--"
print(solution("=.=")) // "aaa"
print(solution("123_.def")) // "123_.def"
print(solution("abcdefghijklmn.p")) // "abcdefghijklmn"
How I tried this :
생각보다 단순하지만 문법적인 기능 체크를 많이 하는 문제였다.
What I got is :
replacingOccurrences()
// 배운 풀이 str: String
while str.contains("..") {
newID = str.replacingOccurrences(of: "..", with: ".")
}
// 4단계 내 풀이 [Characters]()
arr = arr.map{ String($0) }.joined().trimmingCharacters(in: ["."]).map{ Character(extendedGraphemeClusterLiteral: $0) }
// 배운 풀이 str: String
if str.hasPrefix(".") {
str.removeFirst()
}
if str.hasSuffix(".") {
str.removeLast()
}
정말 배울게 한도 끝도 없다.
문제에 관한 모든 저작권 : https://programmers.co.kr/
728x90