본문 바로가기
Algorithm

[구현/수학] 백준 27648 증가 배열 만들기 - 파이썬(Python)

by jangThang 2023. 5. 3.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    27648번: 증가 배열 만들기

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

    www.acmicpc.net

     

     

    2. 문제 풀이

     2차원 배열에서, 왼쪽 또는 아래의 숫자가 크도록 하는 증가 배열을 만들어야 합니다. 최우측하단의 숫자가 K 이하라면 YES와 함께 증가 배열을 출력하고, 그렇지 않으면 NO를 출력합니다. 

     

     

    3. 코드

    import sys
    input = sys.stdin.readline
    
    # 입력
    n, m, k = map(int, input().split())
    
    # 대각선마다 1씩 늘어남
    """
     1 2 3 4 5 6
     2 3 4 5 6 7
     3 4 5 6 7 8
    """
    lst = []
    for i in range(n):
        tmp = []
        for j in range(m):
            tmp.append(i+j+1)
        lst.append(tmp)
    
    if lst[n-1][m-1] <= k:
        print("YES")
        for i in lst:
            print(" ".join(map(str, i)))
    else:
        print("NO")

     K이하의 증가배열은 여러 경우의 수가 나올 수 있지만, 최우측하단의 수가 가장 작은 최적의 경우를 구합니다. 증가배열은 대각선마다 1씩 늘어나면 성립하며, 이렇게 해서 나온 최우측하단의 수가 K이하이면 출력합니다.

     

    star가 되고나서 Tistory

    반응형

    댓글