문제
N개의 수로 된 수열 A[1], A[2], …, A[N] 이 있다. 이 수열의 i번째 수부터 j번째 수까지의 합 A[i] + A[i+1] + … + A[j-1] + A[j]가 M이 되는 경우의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.
출력
첫째 줄에 경우의 수를 출력한다.
내가 푼 풀이
- 수열은 자연수로 이루어져있고, 연속된 수열의 합이 M이 되는 경우의 수를 구한다.
- 재귀호출로 수열의 첫번째부터 마지막번째까지 연속나열된 값들과 더하여 구한다.
import Foundation
// 입력받기
let input = readLine()!.split(separator: " ").map{Int(String($0))!}
let N = input[0], M = input[1]
let A = readLine()!.split(separator: " ").map{Int(String($0))!}
var count = 0
// 더하는 함수
func sum(index: Int, total: Int) {
if total == M {
count += 1
return
}
if total > M {
return
}
if index+1 < A.count {
sum(index: index+1, total: total + A[index+1])
} else {
return
}
}
for i in 0..<A.count {
sum(index: i, total: A[i])
}
print(count)
'코딩테스트 > 백준' 카테고리의 다른 글
BOJ-10819 차이를 최대로 Swift (0) | 2024.04.12 |
---|---|
BOJ-12100 2048(Easy) Swift (0) | 2024.04.12 |
BOJ-1107 리모컨 Swift (0) | 2024.04.11 |
BOJ-1476 날짜 계산 Swift (0) | 2024.04.11 |
BOJ-14500 테트로미노 Swift (Brute-force) (0) | 2024.04.11 |