티스토리 뷰
문제링크 : https://www.acmicpc.net/problem/10836
10836번: 여왕벌
입력의 첫 줄에는 격자칸의 가로와 세로 크기 M(2 ≤ M ≤ 700)과 날짜 수 N(1 ≤ N ≤ 1,000,000)이 자연수로 주어진다. 첫날 아침의 애벌레 크기는 모두 1이므로 입력에 주어지지 않는다. 다음 N개의
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MAX 987654321
#define pii pair <int, int>
int arr[1401];
int main(void) {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    int M, N;
    cin >> M >> N;
 
    fill(arr, arr+2*M-1, 1);  //기본 애벌레는 1마리
    while(N--)
    {
        int idx = 0;
        for(int i=0; i<=2; i++) //0, 1, 2의 갯수
        {
            int num;
            cin >> num;
            while(num--)
            {
                arr[idx++]+=i;
            }
        }
    }
    for(int i=M-1; i>=0; i--)  //뒤에서 부터 출력
    {
        cout << arr[i] << ' '; //첫째 열
        for(int j=M; j<2*M-1; j++)
        {
            cout << arr[j] << ' ';  //두번째 열 첫째 행 ~ 두번째 열 마지막 행
        }
        cout <<'\n';
    }
    
    return 0;
}기본 애벌레가 1마리 이므로 처음에 배열을 1로 채워준다.
증가해주는 방향이 ↑로 갔다가 →로 가므로 결과적으로 오름차순으로 수가 증가된다.
첫번째 열과 첫번째의 행의 값만 변화하므로 배열의 2*M-1 까지의 값만 갱신해주면 된다.
첫 번째 예제를 예시로 들면
1 1 5 6 5 6
1 1 → 1 1 1 1 → 4 5 6 1 → 4 1 → 4 6 이 된다. (변화하지 않은 값은 해당 열의 첫 값을 따른다.)
0 1 2
1 1 1
2 2 2
'백준 > 골드' 카테고리의 다른 글
| [백준 1438번] 가장 작은 직사각형 (C++) (0) | 2023.03.17 | 
|---|---|
| [백준 17836번] 공주님을 구해라! (C++) (0) | 2023.03.15 | 
| [백준 1905번] 상자쌓기 (C++) (0) | 2023.03.12 | 
| [백준 14500번] 테트로미노 (C++) (0) | 2023.03.10 | 
| [백준 18223번] 민준이와 마산 그리고 건우 (C++) (0) | 2023.03.08 |