[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

💻 CS/알고리즘 연습

[알고리즘 연습] 신규 아이디 추천 (프로그래머스 lv1, 스위프트)

inu 2022. 1. 22. 13:00

문제

https://programmers.co.kr/learn/courses/30/lessons/72410?language=swift

 

코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr

풀이

import Foundation func solution(_ new_id:String) -> String { ​​​​var myID: String = new_id ​​​​myID = myID.lowercased() ​​​​var newID: String = "" ​​​​for i in myID { ​​​​​​​​if i.isLetter || i.isNumber || i == "-" || i == "_" || i == "." { ​​​​​​​​​​​​newID.append(i) ​​​​​​​​} ​​​​} ​​​​while newID.contains("..") { ​​​​​​​​newID = newID.replacingOccurrences(of: "..", with: ".") ​​​​} ​​​​while newID.hasPrefix(".") { ​​​​​​​​newID.removeFirst() ​​​​} ​​​​while newID.hasSuffix(".") { ​​​​​​​​newID.removeLast() ​​​​} ​​​​if newID == "" { ​​​​​​​​newID = "a" ​​​​} ​​​​if newID.count >= 16 { ​​​​​​​​let index = newID.index(newID.startIndex, offsetBy: 15) ​​​​​​​​newID = String(newID[newID.startIndex..<index]) ​​​​​​​​if newID.hasSuffix(".") { ​​​​​​​​​​​​newID.removeLast() ​​​​​​​​} ​​​​} ​​​​if newID.count <= 2 { ​​​​​​​​while newID.count != 3 { ​​​​​​​​​​​​newID = newID + String(newID.last!) ​​​​​​​​} ​​​​} ​​​​return newID }
  • isLetter, isNumber : Char의 문자, 숫자여부 확인가능 (반환값 Bool)
  • replacingOccurrences : of 부분을 with으로 변경 (반환값 String)
  • newID.index : String의 index를 반환한다.
  • 파이썬으로 풀었을 때는 막힘없이 금방 풀었는데, Swift로 해결하려니 문법을 몰라서 오래걸렸다...
  • 일단 문자열처리하는 방법에 익숙해질 필요가 있겠다.