코딩테스트/Lv1

[Python] 백준 온라인 저지 4920번 - 테트리스

ggulgood 2022. 5. 1. 04:39

실버 1 https://www.acmicpc.net/problem/4920

 

4920번: 테트리스 게임

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 표의 크기 N이 주어지고, 4 ≤ N ≤ 100을 만족한다. 둘째 줄부터 표에 쓰여 있는 숫자가 주어진다. 숫자는 절댓

www.acmicpc.net

 

 

 

[Python]

 

풀이 방법:

 

테트리스 5가지를 블록 별로 구분

 

 

코드:

def find_max(arr, n, m):
    result = list()
    # ㅡ
    for i in range(n):
        for j in range(m-3):
            maximum = 0
            for k in range(4):
                maximum += arr[i][j+k]
            result.append(maximum)
    # ㅁ
    for i in range(n-1):
        for j in range(m-1):
            maximum = 0
            for k in range(2):
                maximum += arr[i+k][j+k]
            maximum += arr[i+1][j]
            maximum += arr[i][j+1]
            result.append(maximum)
    # N 대칭
    for i in range(n-2):
        for j in range(1, m):
            maximum = 0
            for k in range(2):
                maximum += arr[i+k][j]
            maximum += arr[i+1][j-1]
            maximum += arr[i+2][j-1]
            result.append(maximum)
    # T
    for i in range(n-1):
        for j in range(m-2):
            maximum = 0
            for k in range(3):
                maximum += arr[i][j+k]
            maximum += arr[i+1][j+1]
            result.append(maximum)
    # L 대칭
    for i in range(n-2):
        for j in range(m-1):
            maximum = 0
            for k in range(3):
                maximum += arr[i+k][j+1]
            maximum += arr[i+2][j]
            result.append(maximum)

    return max(result)
    
    
def rotate_90(arr, n, m):
	result = [[0 for j in range(n)] for i in range(m)]

    for i in range(m):
        for j in range(n):
            result[i][j] = arr[n-j-1][i]

    return result
    
    
def main():

    t = 1
    while True:
        n = int(input())
        if n == 0:
            break
        arr = list()
        for i in range(n):
            arr.append(list(map(int, input().split())))

        maximum = -999999999999999999
        maximum = max(maximum, find_max(arr, n, n))
        arr = rotate_90(arr, n, n)
        maximum = max(maximum, find_max(arr, n, n))
        arr = rotate_90(arr, n, n)
        maximum = max(maximum, find_max(arr, n, n))
        arr = rotate_90(arr, n, n)
        maximum = max(maximum, find_max(arr, n, n))

        print("{}.".format(t), maximum)
        t += 1

    return
    
if __name__ == '__main__':
    main()