백준 27648 - 증가 배열 만들기 (Python)
2024. 2. 3. 04:11ㆍ알고리즘
문제
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
풀이
sourcen, m, k = map(int,input().split())
if k>= m+n -1:
print("YES")
for i in range(n):
for j in range(m):
print(i+j+1,end=" ")
print()
else:
print("NO")
이 문제는 단순하게 생각하면 쉽게 풀리는 문제이다.
오른쪽과 아랫쪽으로 갈수록 더 큰 숫자가 되는 배열을 만들어야 하는데, 해당 조건을 만족하는 배열 중 가장 간단한 모양을 생각해보았다.
내가 생각한 모습은 오른쪽과 아래쪽으로 갈수록 1씩 커지면서 대각선의 숫자가 모두 동일한 배열이다
해당 배열이 가장 간단한 모습이라 생각되는데, 이 배열을 만들기 위해서는 (가로길이 + 세로길이 - 1) 개의 수가 필요하다.
따라서 K가 M+N-1보다 작으면 NO를 출력하였고, 이 외의 경우에는 이중 for문을 사용하여 위 사진 같은 배열을 생성하여 출력해주었다.