※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 18130번 문제인 여름나기이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/18130 

 

18130번: 여름나기

첫 줄에 두 정수 진열된 손 선풍기의 개수 N(1 ≤ N ≤ 10,000) 와 현석이가 집까지 가는데 걸어가는 시간 Q(1 ≤ Q ≤ 1,000,000)가 주어진다. 두 번째 줄부터 N+1번째 줄까지 세 정수 P, K, C가 주어지는데

www.acmicpc.net

각 손 선풍기를 이용할 때 지불하게 될 총액을 계산하는 식을 하나 만들고, 반복문을 이용해 가장 비용이 적게 드는 손 선풍기를 찾아 그 번호와 그 때의 비용을 출력하는 것으로 문제를 해결하자.

 

추가비용을 낼 시점의 수를 나눗셈의 몫을 이용하여 먼저 계산한다면 총 추가비용을 구하는 식을 어렵지 않게 유도할 수 있을 것이다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;
typedef long long ll;

int N, Q;
ll id;
ll ans = 9223372036854775807LL;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N >> Q;
	for (int n = 1; n <= N; n++) {
		ll P, K, C; cin >> P >> K >> C;
		ll cnt = (Q - 1) / K;

		ll val = P + cnt * (cnt + 1) / 2 * C;
		if (val < ans) id = n, ans = val;
	}

	cout << id << ' ' << ans;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 6600 // C++] 원의 둘레  (0) 2023.01.10
[BOJ 25558 // C++] 내비게이션  (0) 2023.01.10
[BOJ 27110 // C++] 특식 배부  (0) 2023.01.10
[BOJ 26949 // C++] Kylskåpstransport  (0) 2023.01.10
[BOJ 18126 // C++] 너구리 구구  (0) 2023.01.09

+ Recent posts