본문 바로가기

Algorithm/Math

(C++) - 백준(BOJ) 8718번 : Bałwanek

반응형

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

 

8718번: Bałwanek

W pierwszym wierszu wejścia znajdują się dwie liczby całkowite x, k (1 ≤ x ≤ 106, 1 ≤ k ≤ 105, k < x), oznaczające odpowiednio ilość litrów śniegu w parku oraz z ilu litrów śniegu zbudowana jest jedna z kul śnieżnych bałwana.

www.acmicpc.net

방정식을 세워 답을 구하는 문제였습니다.

 

📕 풀이방법

📔 입력 및 초기화

x, k를 선언 후 입력받습니다.

 

📔 풀이과정

눈 사람은 총 세 부분입니다. 따라서 주어진 k는 눈사람을 구성하는 세 덩이 중 하나입니다.

 

 1. k가 가장 위에 위치한 덩어리인 경우 : 그 덩이를 a라 했을 때 중간 덩이는 2a, 가장 아래 덩이는 4a입니다. 7a <= k라는 공식이 성립한다면 주어진 k는 가장 위에 위치한 덩어리입니다. 

 

 2. k가 중간에 위치한 덩어리인 경우 : 마찬가지로 a라 했을 때 가장 위 덩이는 1/2a, 가장 아래 덩이는 2a입니다. 7/2k <= x라는 공식이 성립합니다.

 

 3. k가 가장 아래 덩이인 경우 : 중간 덩이는 1/2k, 가장 위 덩이는 1/4k이므로 7/4k <= x입니다. 

 

단위가 밀리미터이므로 양변에 1000을 곱해줍니다.그러면 1번은 7000a <= 1000k, 2번 3500k <= 1000x, 3번 1750k <= 1000x라는 공식을 가집니다.

 

 4. 1, 2, 3번 중에 해당하는 조건을 각각 a, b, c에 저장합니다.

📔 정답출력

a, b, c 중 최댓값을 출력합니다.


📕 Code

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll x, k, a, b, c;
int main(){
    cin >> x >> k;
    if(7000 * k <= 1000 * x) a = 7000 * k;
    if(3500 * k <= 1000 * x) b = 3500 * k;
    if(1750 * k <= 1000 * x) c = 1750 * k;
    cout << max({a,b,c});
}