요구능력
누적합, ascii
문제풀이
알파벳마다 알파벳갯수의 누적 배열을 dictionary에 저장해주었다.
알파벳만큼 for문을 돌리고, 현재 문자열의 위치의 알파벳과 내가 저장하려는 알파벳을 비교하기위해 character -> ascii로 변경해주었다.
dictionary에 저장할 때는 다시 알파벳문자형태로 저장해줬다.
후기
누적합의 개념을 알고 알파벳관련된건 ascii코드로 변경해서 푸는문제가 많다는걸 안다면 간단히 풀리는 문제같다.
코드
import Foundation
var arr = Array(String(readLine()!))
var q = Int(String(readLine()!))!
var dict = [String: [Int]]()
for i in Character("a").asciiValue!...Character("z").asciiValue!{
var preFix = Array(repeating: 0, count: arr.count)
if Character(String(arr[0])).asciiValue! == i {
preFix[0] = 1
}
for j in 1..<arr.count{
if Character(String(arr[j])).asciiValue! == i {
preFix[j] += (1 + preFix[j - 1])
}else{
preFix[j] = preFix[j - 1]
}
}
// print(String(UnicodeScalar(i)))
dict[String(UnicodeScalar(i))] = preFix
}
var str = ""
for _ in 0..<q{
let alr = readLine()!.split(separator: " ").map{String($0)}
let a = alr[0]
let l = Int(alr[1])!
let r = Int(alr[2])!
let temp = dict[a]!
if l == 0{
str += "\(temp[r])\n"
}else{
str += "\(temp[r] - temp[l - 1])\n"
}
}
print(str)
'Algorithm > 문제풀이_백준' 카테고리의 다른 글
[Swift][투포인터] 백준 3273번 (두 수의 합) (0) | 2022.05.31 |
---|---|
[Swift][누적합] 백준 10986번 (나머지 합) (2) | 2022.05.30 |
[Swift][누적합] 백준 2559번 (수열) (0) | 2022.05.30 |
[Swift][누적합] 백준 11659번 (구간 합 구하기4) (0) | 2022.05.30 |
[Swift][우선순위 큐] 백준 1655번 (가운데를 말해요) (0) | 2022.05.27 |
댓글