[백준 24609] Overdraft (C#, C++) - soo:bak
작성일 :
문제 링크
설명
문제의 목표는 은행 거래 내역을 바탕으로 ‘Overdraft 수수료를 피하기 위해 필요한 최소 시작 잔액
을 계산하는 것입니다.
입력으로 주어지는 거래의 횟수만큼, 각 거래를 순회하며 현재 잔액
과 최소 잔액
을 거래에 반영합니다.
입금은 잔액을 증가시키고, 출금은 잔액을 감소시킵니다.
이 때, 각 거래 후 현재 잔액이 이전의 최소 잔액보다 낮은 경우에 최소 잔액을 갱신합니다.
모든 거래에 대해 처리를 완료한 후, 최소 잔액이 음수라면, 이 값의 절대값이 ‘Overdraft’ 수수료를 피하기 위해 필요한 최소금액이 됩니다.
최소 잔액이 0
이상인 경우, ‘Overdraft’ 수수료를 피하기 위해 추가로 필요한 시작 잔액은 없으므로, 0
을 출력합니다.
Code
[ C# ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
namespace Solution {
class Program {
static void Main(string[] args) {
var n = int.Parse(Console.ReadLine()!);
var transactions = new int[n];
for (int i = 0; i < n; i++)
transactions[i] = int.Parse(Console.ReadLine()!);
var result = transactions
.Aggregate((CurrentBalance: 0, MinBalance: 0), (acc, transaction) => {
var currentBalance = acc.CurrentBalance + transaction;
var minBalance = Math.Min(acc.MinBalance, currentBalance);
return (currentBalance, minBalance);
});
Console.WriteLine(result.MinBalance < 0 ? - result.MinBalance : 0);
}
}
}
[ C++ ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n; cin >> n;
vector<int> transactions(n);
for (int i = 0; i < n; i++)
cin >> transactions[i];
int currentbalance = 0, minBalance = 0;
for (int i = 0; i < n; i++) {
currentbalance += transactions[i];
minBalance = min(minBalance, currentbalance);
}
cout << (minBalance < 0 ? -minBalance : 0) << "\n";
return 0;
}