본문 바로가기

Algorithm/Math

(C++) - 백준(BOJ) 9298 : Schronisko

반응형

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

 

8760번: Schronisko

Kiedy Hektor zajmował się realizacją projektu HektorJudge, jego kolega Wiktor uznał, że życie nie powinno składać się wyłącznie z siedzenia przy komputerze i wybrał się na wycieczkę w góry. Kiedy wieczorem dotarł do schroniska ze zdziwieni

www.acmicpc.net

공식을 찾아 푼 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

테스트 케이스 수 t, 열 w, 행 k를 선언 후 t에 입력을 받습니다. 이 후 while loop를 수행하며 매 테스트 케이스 마다 w, k에 입력받습니다.

📔 풀이과정

인접한 두 칸을 차지하도록 배치했을 때 최대 인원을 구하기 위해서 4가지 경우가 있습니다.

1. 행, 열 모두 짝수

이 경우엔 딱 들어맞도록 배치가 가능합니다. 행 / 2 * 열만큼 배치할 수 있습니다.

2. 열만 짝수

1 X 2로 배치해야하므로 가장 이상적인 배치는 짝수에 2칸짜리를 놓는다면 딱 들어맞을 수 있습니다.

3. 행만 짝수

2.과 마찬가지 입니다.

4. 행, 열 모두 홀수

어떻게 배치해도 딱 들어맞진 않습니다. 최대한 채운 뒤 마지막 1줄이 남게 되는데 이를 1자형으로 최대한으로 배치해줍니다.

📔 정답출력

경우에 맞게 출력해줍니다.


📕 Code

#include <bits/stdc++.h>
using namespace std;
int t, w, k;
int main(){
    cin >> t;
    while(t--){
        cin >> w >> k;
        if(!(w % 2) && !(k % 2))
            cout << w / 2 * k;
        else if(!(w % 2))
            cout << w / 2 * k;
        else if(!(k % 2))
            cout << k / 2 * w;
        else 
            cout << min(w, k) / 2 * max(w, k) + max(w, k) / 2;
        cout << '\n';
    }
}