2021. 5. 31. 16:20ใ๐ง๐ป๐ป iOS ๊ฐ๋ฐ/Swift - Algorithm - Solutions
๐ต๐ป ๋ฌธ์ ํด์
์นด์นด์ค ๊ณ์ ๊ฐ๋ฐํ์ ๋ฐฐ์น๋ ์ ์ ์ฌ์ ๋ค์ค๊ฐ ์นด์นด์ค ์๋น์ค์ ๊ฐ์ ํ๋ ์ ์ ๋ค์ด ๊ท์น์ ๋ง์ง ์๋ ์์ด๋๋ฅผ ์ ๋ ฅํ์์ ๋, ๊ท์น์ ๋ง์ถฐ ์๋ก์ด ์์ด๋๋ฅผ ์ถ์ฒํ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ค๊ณ ํฉ๋๋ค. ์นด์นด์ค ์๋น์ค ์์ด๋ ๊ท์น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์์ด๋์ ๊ธธ์ด๋ 3์ ์ด์ 15์ ์ดํ์ฌ์ผ ํฉ๋๋ค.
- ์์ด๋๋ ์ํ๋ฒณ ์๋ฌธ์, ์ซ์, ๋นผ๊ธฐ(-), ๋ฐ์ค(_), ๋ง์นจํ(.) ๋ฌธ์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋จ, ๋ง์นจํ(.)๋ ์ฒ์๊ณผ ๋์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๋ํ ์ฐ์์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๋ฌํ ๊ท์น์ ๋ง์กฑํ์ง ์๋ ์์ด๋๋ ์ด 7๊ฐ์ง์ ์์ฐจ์ ์ธ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ๊ฒ์ฌํ ํ ์๋ก์ด ์์ด๋๋ฅผ ์ถ์ฒํด ์ค ์๊ฐ์ ๋๋ค.
- ๋ชจ๋ ๋๋ฌธ์๋ฅผ ๋์๋๋ ์๋ฌธ์๋ก ์นํํฉ๋๋ค
- ์ํ๋ฒณ ์๋ฌธ์, ์ซ์, ๋นผ๊ธฐ(-), ๋ฐ์ค(_), ๋ง์นจํ(.)๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ฌธ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- ๋ง์นจํ(.)๊ฐ 2๋ฒ ์ด์ ์ฐ์๋ ๋ถ๋ถ์ ํ๋์ ๋ง์นจํ(.)๋ก ์นํํฉ๋๋ค.
- ๋ง์นจํ(.)๊ฐ ์ฒ์์ด๋ ๋์ ์์นํ๋ค๋ฉด ์ ๊ฑฐํฉ๋๋ค.
- ๋น ๋ฌธ์์ด์ด๋ผ๋ฉด, "a"๋ฅผ ๋์ ํฉ๋๋ค.
- ๊ธธ์ด๊ฐ 16์ ์ด์์ด๋ฉด, ์ฒซ 15๊ฐ์ ๋ฌธ์๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ฌธ์๋ค์ ๋ชจ๋ ์ ๊ฑฐํฉ๋๋ค. ๋ง์ฝ ์ ๊ฑฐ ํ ๋ง์นจํ(.)๊ฐ ๋์ ์์นํ๋ค๋ฉด ๋์ ์์นํ ๋ง์นจํ(.) ๋ฌธ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- ๊ธธ์ด๊ฐ 2์ ์ดํ๋ผ๋ฉด, ๋ง์ง๋ง ๋ฌธ์๋ฅผ ๊ธธ์ด๊ฐ 3์ด ๋ ๋๊น์ง ๋ฐ๋ณตํด์ ๋์ ๋ถ์ ๋๋ค.
๐ฆ ๋ฌธ์ ํ์ด & ์ฝ๋
import Foundation
func solution(_ new_id:String) -> String {
let numeric: ClosedRange<Character> = "0"..."9"
let alphabet: ClosedRange<Character> = "a"..."z"
let symbols: [Character] = [".","-","_"]
func filtering(_ c: Character) -> Bool {
return numeric.contains(c) || alphabet.contains(c) || symbols.contains(c)
}
// ์๋ฌธ์๋ก ์นํ, ๊ฐ๋ฅํ ๋ฌธ์๋ค๋ง ํํฐ๋ง
var recommended = new_id.lowercased().filter{filtering($0)}
// "."๊ฐ ๋๊ฐ ์ด์ ์ด์ด์ ์ ์กด์ฌํ๋ฉด "."๋ก ๋ณํ
while recommended.contains("..") {
recommended = recommended.replacingOccurrences(of: "..", with: ".")
}
// ์์ด๋์ ์ฒ์๊ณผ ๋์ "."๊ฐ ์กด์ฌํ๋ฉด ์ ๊ฑฐ
while recommended.hasPrefix(".") {
recommended.removeFirst()
}
while recommended.hasSuffix(".") {
recommended.removeLast()
}
// ๋น ๋ฌธ์์ด์ผ ๊ฒฝ์ฐ "a"
if recommended.isEmpty {
recommended = "a"
}
// ์์ด๋์ ๊ธธ์ด๊ฐ 16์ด์์ผ ๋ ๋์ด์ ์ฒ๋ฆฌ
if recommended.count >= 16 {
let temp = recommended.map{$0}
if temp[14] == "." {
recommended = String(temp[0...13])
} else {
recommended = String(temp[0...14])
}
}
// ๊ธธ์ด๊ฐ 2์ดํ์ผ ๊ฒฝ์ฐ ๋ง์ง๋ง ๋ฌธ์๋ฅผ ๊ธธ์ด๊ฐ 3์ด ๋ ๋๊น์ง ์ด์ด์ ๋ถํ๋ค.
if recommended.count <= 2 {
while recommended.count != 3 {
recommended += String(recommended.last!)
}
}
return recommended
}
๐คท๐ปโ๏ธ ๋ ์๊ฐํด๋ณด๊ธฐ
๋ฌธ์์ด์ ์กฐ์ํ ์ ์๋์ง๋ฅผ ๋ฌผ์ด๋ณด๋ ๋ฌธ์ ์์ต๋๋ค. hasPrefix ๋ฉ์๋์ hasSuffix ๋ฉ์๋๋ฅผ ํ์ฉํ๋ฉด ๋์ฑ ์ฝ๊ฒ ์ ๊ทผ ํ ์ ์์ต๋๋ค.
String ์ธ์คํด์ค ๋ฉ์๋๋ก์ ํด๋น String์ด ์ ๋ฌ์ธ์๋ก ์ฃผ์ด์ง String์ผ๋ก ์์ํ๋์ง, ๋๋๋์ง๋ฅผ Bool ๊ฐ์ผ๋ก ๋ฐํํด์ฃผ๋ ํจ์๋ค์ ๋๋ค. ์ด ๋ ํจ์ ๋ชจ๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ๋ ์ฌ์ฉํ ๋ ์ฃผ์ํ๋ฉด ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
๐๐ป ์ฐธ๊ณ
'๐ง๐ปโ๐ป iOS ๊ฐ๋ฐ > Swift - Algorithm - Solutions' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] ํฉ์น ํ์ ์๊ธ (0) | 2021.06.01 |
---|---|
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] [์นด์นด์ค ์ธํด] ๊ฒฝ์ฃผ๋ก ๊ฑด์ค (0) | 2021.05.31 |
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] ์์ ๊ฒ์ (0) | 2021.05.29 |
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] [3์ฐจ] ๋ฐฉ๊ธ๊ทธ๊ณก (0) | 2021.05.27 |
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] [3์ฐจ] n์ง์ ๊ฒ์ (0) | 2021.05.27 |