Algorithm/Baekjoon
[๋ฐฑ์ค] (Swift) 10809๋ฒ - ์ํ๋ฒณ ์ฐพ๊ธฐ
๊ฐ์ ๐ฅ
2022. 2. 15. 12:42
๋ฐ์ํ
๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/10809
10809๋ฒ: ์ํ๋ฒณ ์ฐพ๊ธฐ
๊ฐ๊ฐ์ ์ํ๋ฒณ์ ๋ํด์, a๊ฐ ์ฒ์ ๋ฑ์ฅํ๋ ์์น, b๊ฐ ์ฒ์ ๋ฑ์ฅํ๋ ์์น, ... z๊ฐ ์ฒ์ ๋ฑ์ฅํ๋ ์์น๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํ๋ค. ๋ง์ฝ, ์ด๋ค ์ํ๋ฒณ์ด ๋จ์ด์ ํฌํจ๋์ด ์์ง ์๋ค๋ฉด -1์ ์ถ
www.acmicpc.net
๋ด๊ฐ ํผ ํ์ด
- ์ ๋ ฅ๋ฐ์ ๋ฌธ์๋ฐฐ์ด line / ๊ฒ์ฌ๊ฐ ์๋ฃ๋ ๊ธ์๋ฅผ ๋ฃ์ด์ฃผ๋ char ๋ฐฐ์ด left / ์ ๋ต๋ฐฐ์ด answer
- ์ ๋ต ๋ฐฐ์ด์๋, ๋ฑ์ฅํ์ง ์์ ๋ฌธ์๋ -1 ์ด ๋ค์ด๊ฐ์ผํ๊ธฐ ๋๋ฌธ์, ์ฐ์ -1์ 26๊ฐ ์ฑ์ ๋ค. (a...z๋ 26๊ฐ)
- ๋๋ line์์ ํ๊ธ์์ฉ for in ๊ตฌ๋ฌธ์ผ๋ก ๋ฐ์์, ํด๋น char์ asciiValue๋ฅผ ํ์ฉํ์ฌ ๋ช๋ฒ์งธ ์ํ๋ฒณ์ธ์ง answer๋ฐฐ์ด์ ์ธ๋ฑ์ค ๊ฐ์ ๊ตฌํ๋ค.
- ๊ทธ๋ฆฌ๊ณ ๊ฒ์ฌ๊ฐ ์๋ฃ๋ ๋จ์ด๋ left์ ๋ฃ์ด์ค์ผ๋ก์จ, ์ํ๋ฒณ์ด ๋๊ฐ ์ด์ ๋ฑ์ฅํ๊ฒ ๋๋ฉด, ์ฒซ๋ฒ์งธ ๋ฑ์ฅํ ์ธ๋ฑ์ค๊ฐ์ผ๋ก ๋ค์ด๊ฐ๊ฒ๋ ์ค์ ํด์ฃผ์๋ค.
import Foundation
var line = Array(readLine()!)
var left: [Character] = []
var answer = [Int](repeating: -1, count: 26)
for i in 0..<line.count {
let ch = line.removeFirst()
if left.contains(ch) {
continue
}else {
answer[Int(ch.asciiValue!)-97] = i
}
left.append(ch)
}
print(answer.map { "\($0)" }.joined(separator: " "))
๋ค๋ฅธ ์ฌ๋ ํ์ด
a ~ z ๊น์ง ์์คํค ์ฝ๋๋ก ๋ฐ๊ฟ์ i์ ๋ฃ์ด์ฃผ๊ณ i๊ฐ์ ๋ค์ ๋ฌธ์๋ก ๋ฐ๊ฟ์ char์ ๋ฃ์ด์ค๋ค. array s ์ char์ด ํฌํจ๋์ด ์์ผ๋ฉด s.index๋ฅผ ํตํด์ ๋ช๋ฒ์งธ์ ์๋์ง ์ถ๋ ฅํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ์งํํ๋ค. ์์คํค์ฝ๋๋ฅผ ์ด์ฉํ๋ ๋ฐฉ์์ ๋์ผํ์ง๋ง, ์ด๋ฅผ ์ ๋ต๋ฐฐ์ด์ ๋ฃ์ด์ฃผ๋ ๋ฐฉ์์์ ์ฐจ์ด๊ฐ ์กฐ๊ธ ์์๋ค.
let s = Array(readLine()!)
for i in Character("a").asciiValue!...Character("z").asciiValue! {
var char = Character(UnicodeScalar(i))
if s.contains(char){
print("\(s.index(of: char)!)",terminator: " ")
}else{
print("-1", terminator: " ")
}
}
๋ฐ์ํ