Problem Solving/BOJ

[백준 / BOJ] C++ 27648 증가 배열 만들기

nageune 2023. 3. 4. 20:34
728x90
반응형

27648번: 증가 배열 만들기

 

문제

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

 

27648번: 증가 배열 만들기

첫째 줄에 $N$, $M$, $K$가 주어진다. $\left(1 \le N , M \le 1\,000,1 \le K \le 100\,000 \right)$

www.acmicpc.net

 

 

풀이

맨 왼쪽 위부터 맨 오른쪽 아래 칸까지 이동하는데 각 칸의 수가 증가하도록 구성해야 한다. 이 배열을 만들 수 있는지 여부와 만들 수 있다면 가능한 것 중 하나를 출력하면 된다.

 

 대각선을 왼쪽 위부터 오른쪽으로 차례대로 1, 2, 3,...으로 증가시키도록 구성하면 된다.

ex)
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7

실제 배열을 만들 필요도 없이 출력할 수 있다. 맨 왼쪽 위에서 맨 오른쪽 아래 칸까지 가는 칸은 N+M-1칸이므로 K가 이보다 작으면 배열을 만들 수 없다.

 

 

코드

#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  int n, m, k;
  cin >> n >> m >> k;
  if (k < n + m - 1) {
    cout << "NO\n";
    return 0;
  }
  cout << "YES\n";
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++)
      cout << i + j + 1 << ' ';
    cout << '\n';
  }
  return 0;
}
728x90
반응형