본문 바로가기

누적합6

[Swift][누적합] 백준 10986번 (나머지 합) 요구능력 누적합, 수학 문제풀이 아래 코드에 빗대어 우리가 구하려는 구간의 누적합이 (i + 1)부터 (j)까지라면 preFix[j] - preFix[i]가 구간합이 될것이다. 문제에서 연속된 부분의 구간합이 M으로 나누어 떨어지는 구간의 개수를 출력하라고 했으므로, 우리가 구해야 하는것은 (preFix[j] - preFIx[i]) % m = 0 이다. 여기서 모듈러의 연산을 활용해야 하는데, (preFix[j] % m) - (preFix[i] % m) = 0 로 분배하고, (preFix[j] % m) = (preFix[i] % m) 가 된다. 그래서 누적합을 구하면서 count[나머지] += 1을 통해 누적합 % m의 개수를 저장해준다. 개수를 저장해주는 이유는 이 갯수를 통해 조합을 이용하기 위해서이.. 2022. 5. 30.
[Swift][누적합] 백준 16139번 (인간 - 컴퓨터 상호작용) 요구능력 누적합, 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").ascii.. 2022. 5. 30.
[Swift][누적합] 백준 2559번 (수열) 요구능력 누적합 문제풀이 누적합의 구간의 합을 구할 수 있는지를 묻는 문제이다. 손으로 인덱스와 숫자를 적어놓고 k를 빼주면 원하는 갯수의 누적합을 구할 수 있다는걸 알게될것이다. Int.max에 -1을 곱해준 이유는 최대값이 음수가 될 수 있는 경우를 고려해준것이다. if i -k < -1인 경우는 구하려는 누적합의 갯수만큼 나오지 않기 때문에 처리해준것이고, if i - k == -1인 경우는 맨처음부터 원하는 갯수인 k개만큼 나오기에 구해둔 누적합만 불러온것이다. 후기 최대값이 음수가 될 수 있다는점을 잘 고려하자. 코드 import Foundation let nk = readLine()!.split(separator: " ").map{Int(String($0))!} let n = nk[0] let.. 2022. 5. 30.
[Swift][누적합] 백준 11659번 (구간 합 구하기4) 요구능력 누적합 문제풀이 기본적인 누적합에 대한 개념을 숙지한다면 쉽게 풀리는 문제이다. 후기 누적합의 개념에 대해 알아보았다! 코드 import Foundation let nm = readLine()!.split(separator: " ").map{Int(String($0))!} let n = nm[0] let m = nm[1] var arr = readLine()!.split(separator: " ").map{Int(String($0))!} var str = "" var prefixSum = Array(repeating: 0, count: arr.count) prefixSum[0] = arr[0] for i in stride(from: 1, to: arr.count, by: 1){ prefixSum.. 2022. 5. 30.