본문 바로가기
Algorithm/문제풀이_백준

[Swift][누적합] 백준 16139번 (인간 - 컴퓨터 상호작용)

by Joahnee 2022. 5. 30.

요구능력

누적합, 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)

댓글