백준

백준 23971 ZOAC 4, c++

2024. 2. 26. 23:19

 

 

 

처음 작성한 코드는 다음과 같다.

#include <iostream>
using namespace std;

int main() {
    int H, W, N, M;
    cin >> H >> W >> N >> M;
    
    int count = 0;
    int arr[H][W] = {0, };
    
    arr[0][0] = 1;
    count++;
    for(int i=0; i<N; i++) {
        for(int j=1; j<M; j++)
            arr[i][j] = 1;
    }
    
    for(int i=0; i<H; i++){
        for(int j=1; j<W; j++) {
            if(arr[i][j]==1)
                continue;
            
            arr[i][j] = 1;
            count++;
            for(int k=i; k<i+N; k++){
                for(int l=j+1; l<j+M; l++)
                    if(k<H && l<W)
                        arr[k][l] = 1;
            }
        }
    }
    
    cout << count;
    return 0;
}

하지만 런타임에러가 났다. 어딘가에서 오류가 나는 것 같다.

 

 

 

위의 방식처럼 하나하나 세는 방식이 아니라, 전체적인 규칙을 찾아 그 규칙을 간단하게 코드로 구현하는 방법이면 훨씬 간단하게 구현할 수 있었다!

결국 세로로는 N칸, 가로로는 M칸씩 띄어 앉게 되니까 (세로 한 줄에 앉는 사람수) * (가로 한 줄에 앉는 사람수)만 구해주면 되는 문제였다!

최종 코드는 다음과 같다.

#include <iostream>
using namespace std;

int main() {
    int H, W, N, M;
    int result;
    
    cin >> H >> W >> N >> M;   
    
    if(H%(N+1)==0)
        result = H/(N+1);
    else
        result = H/(N+1)+1;
    
    if(W%(M+1)==0)
        result *= W/(M+1);
    else
        result *= W/(M+1)+1;
    
    cout << result;
    
    return 0;
}

 

 

 

 

 

'백준' 카테고리의 다른 글

백준 2460 지능형 기차 2, c++  (1) 2024.02.27
백준 3460 이진수, c++  (0) 2024.02.27
백준 5073 삼각형과 세 변, c++  (0) 2024.02.26
백준 2178 미로 탐색, c++  (0) 2024.02.25
백준 2606 바이러스, c++  (0) 2024.02.25