처음 작성한 코드는 다음과 같다.
#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 |