[백준 15494] Davor (C#, C++) - soo:bak
작성일 :
문제 링크
설명
월요일부터 일요일까지 적금액이 일정하게 증가합니다. 52주 동안의 총액이 주어질 때, 첫날 적금액과 증가량을 구하는 문제입니다. 첫날 적금액은 최대로, 증가량은 최소로 합니다.
접근법
총액을 364로 나누면 첫날 적금액과 증가량의 관계식을 얻습니다.
첫날 적금액을 가능한 큰 값부터 시도하며, 나머지가 3으로 나누어지는 경우를 찾습니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
class Program {
static void Main() {
var n = long.Parse(Console.ReadLine()!);
var s = n / 364;
var maxX = Math.Min(100L, s - 1);
for (long x = maxX; x >= 1; x--) {
var diff = s - x;
if (diff > 0 && diff % 3 == 0) {
var k = diff / 3;
Console.WriteLine(x);
Console.WriteLine(k);
return;
}
}
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll n; cin >> n;
ll s = n / 364;
ll maxX = min(100LL, s - 1);
for (ll x = maxX; x >= 1; x--) {
ll diff = s - x;
if (diff > 0 && diff % 3 == 0) {
ll k = diff / 3;
cout << x << "\n" << k << "\n";
return 0;
}
}
return 0;
}