문제

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

+ Recent posts