[BOJ] 10808λ² - μνλ²³ κ°μ (Swift)
λ¬Έμ
μνλ²³ μλ¬Έμλ‘λ§ μ΄λ£¨μ΄μ§ λ¨μ΄ Sκ° μ£Όμ΄μ§λ€. κ° μνλ²³μ΄ λ¨μ΄μ λͺ κ°κ° ν¬ν¨λμ΄ μλμ§ κ΅¬νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
10808λ²: μνλ²³ κ°μ
λ¨μ΄μ ν¬ν¨λμ΄ μλ aμ κ°μ, bμ κ°μ, …, zμ κ°μλ₯Ό 곡백μΌλ‘ ꡬλΆν΄μ μΆλ ₯νλ€.
www.acmicpc.net
μ λ ₯
첫째 μ€μ λ¨μ΄ Sκ° μ£Όμ΄μ§λ€. λ¨μ΄μ κΈΈμ΄λ 100μ λμ§ μμΌλ©°, μνλ²³ μλ¬Έμλ‘λ§ μ΄λ£¨μ΄μ Έ μλ€.
μΆλ ₯
λ¨μ΄μ ν¬ν¨λμ΄ μλ aμ κ°μ, bμ κ°μ, …, zμ κ°μλ₯Ό 곡백μΌλ‘ ꡬλΆν΄μ μΆλ ₯νλ€.
λ¬Έμ νμ΄
μ λ ₯λ λ¬Έμμ΄μ μννλ©° ν΄λΉνλ μνλ²³ μμμ ν΄λΉνλ μΈλ±μ€μ +1μ ν΄μ£Όλ©΄ λ©λλ€.
ν΄λΉ νμ΄λ μ΄μ€ forλ¬Έμ μ¬μ©νκΈ° λλ¬Έμ O(n^2) μκ° λ³΅μ‘λλ₯Ό κ°μ΅λλ€.
νμ§λ§, λ°°μ΄μ μΈλ±μ€μ ν΄λΉ μνλ²³ λ¬Έμμ μμ€ν€ μ½λλ₯Ό μ΄μ©νλ€λ©΄ O(n) μκ° λ³΅μ‘λλ‘ λ¬Έμ λ₯Ό ν μ μμ΅λλ€.
(μ¬μ€, μ λ μ²μ λ¬Έμ λ₯Ό νμμ λ μ΄μ€ forλ¬ΈμΌλ‘ νμμ΄μ ..γ )
κ° λ¬Έμλ κ³ μ ν μμ€ν€ μ½λλ₯Ό κ°κ³ μμΌλ©°, μ°μλ μνλ²³λ€μ μ°μλ μμ€ν€ μ½λ κ°μ κ°μ΅λλ€.
μ¦, 'a'λ μμ€ν€ μ½λλ₯Ό 10μ§μλ‘ νμνλ©΄ 97, 'b'λ 98, 'c'λ 99 ... μμ°¨μ μΌλ‘ μ΄μ΄μ§λλ€.
(μΆκ°λ‘ 'A'λ 65, 'B'λ 66 ... μμ°¨μ μΌλ‘ μμ€ν€ μ½λ κ°μ κ°μ΅λλ€.)
μ΄ λ¬Έμ μμλ μ λ ₯μ΄ μλ¬Έμλ‘ μ νλμ΄ μμΌλ―λ‘ ν΄λΉ μ¬μ€μ νμ©ν μ μμ΅λλ€.
νμ΄ μμ
1. μΆλ ₯ κ°μ μ μ₯νκΈ° μν΄ μνλ²³ κ°μλ§νΌμ μμλ₯Ό κ°λ λ°°μ΄μ μ΄κΈ°νν©λλ€.
2. μ λ ₯κ°μΌλ‘ λ°μ λ¬Έμμ΄λ‘ μννλ©° κ° λ¬Έμμ μμ€ν€ μ½λ κ°μ νμΈν©λλ€.
3. ν΄λΉ κ°μ 'a'μ μμ€ν€ μ½λ κ°μΈ 97λ‘ λΉΌμ£Όκ³ , ν΄λΉ κ°μ λ°°μ΄μ μΈλ±μ€λ‘ νμ©νμ¬ ν΄λΉ μνλ²³ μ리μ +1μ ν΄μ€λλ€.
νμ΄ μ½λ
< νμ΄ 1 - μ΄μ€ forλ¬Έ νμ© >
// μ΄μ€ forλ¬Έ μ¬μ© νμ΄
// O(n^2)
var input = readLine()
if let input = input {
var answer = [Int](repeating: 0, count: 26)
var alphabets = "abcdefghijklmnopqrstuvwxyz"
var index = 0
for str in input {
for alphabet in alphabets {
if str == alphabet {
answer[index] += 1
index = 0
break
} else {
index += 1
}
}
}
print(answer.map { String($0) }.joined(separator:" ") )
}
< νμ΄ 2 - μμ€ν€ μ½λ νμ© >
λ¬Έμ 'a'μ μμ€ν€ μ½λκ° 97μΈ κ²μ μκ³ μλ€λ©΄ 97μ μ§μ λμ νμ¬ μ½λλ₯Ό μμ±ν μ μμ§λ§,
λͺ¨λ₯Ό κ²½μ°μλ μλμ κ°μ΄ μ§μ νμΈνμ¬ μ€νν μ μμ΅λλ€.
(Swiftμμ μμ€ν€ μ½λλ₯Ό νμΈνκΈ° μν΄ unicodeScalars, utf8, asciiValue λ±μ νμ©ν μ μμ§λ§,
κ° λ°©μλ§λ€ 리ν΄λλ νμ
μ΄ λ€λ₯΄κΈ° λλ¬Έμ μ£Όμν΄μΌν©λλ€. μ΄λ λμ€μ Swiftμ λ¬Έμμ΄μ 곡λΆνλ©΄μ λ λ€λ€λ³΄κ² μ΅λλ€.)
// μνλ²³ μμ€ν€ μ½λλ₯Ό κ³ λ €νλ©΄ forλ¬Έ ν λ²μΌλ‘λ κ°λ₯.
// O(n)
let input = readLine()!
var array = [Int](repeating: 0, count: 26)
var a:Character = "a"
for alphabet in input {
let index = Int(alphabet.asciiValue! - a.asciiValue!)
array[index] += 1
}
print(array.map{ String($0) }.joined(separator: " "))