[C++] 23971 - ZOAC 4

cherry_·2023년 10월 15일
0

코딩테스트 준비

목록 보기
11/15

문제

23971 - ZOAC 4

정답

#include <iostream>

using namespace std;

int main()
{
    int h, w, n, m;
    cin >> h >> w >> n >> m;
    
    int col, row;
    
    if(h%(n+1) != 0)    col = (h/(n+1)) + 1;
    else    col = (h/(n+1));
    if((w%(m+1)) != 0)    row = (w/(m+1)) + 1;
    else    row = (w/(m+1));
    
    cout << col * row;

    return 0;
}

생각의 흐름

완전 탐색 돌리면 될 ..듯?
일단 2차 배열 만들고. n번째 칸 줄을 비우고.
예를 들어, 세로로 2칸을 띄워야 한다면 3, 4, 6, 7칸 비우는 식.
그리고 가로도 똑같이 해줌.
비우는 걸 false로 해서, true인 칸 개수를 출력하면 되지 않을까?

생각을 해보자.
20명에서 6명이 나온 원리.
세로 5줄, 가로 4줄. n줄씩 띄어 앉으니까 (h/1+n) + 1 = 앉을 수 있는 세로 줄.
가로줄도 마찬가지겠지?
단, 나누어 떨어지면 +1 안해도 됨
둘이 곱하면 되겠군...

알면 좋을 것

나누어 떨어지면 +1 하지 않는다는 걸 수학적으로 말하면 반올림;;;이다.
ceil()을 알았으면 한 줄로 끝날 수도 있었던 문제!

cout << ceil(h / (n+1)) * ceil(w / (m+1));

0개의 댓글