{프로젝트 오일러/Project Euler} 11. 격자 속 연속된 수의 곱의 최댓값
알고리즘 공부/프로젝트 오일러(Project Euler)

{프로젝트 오일러/Project Euler} 11. 격자 속 연속된 수의 곱의 최댓값

한국어/Hackerrank - 한국어 버전과 문제가 다를 수 있습니다. 채점은 Hackerrank를 추천합니다.

격자의 크기 = 20x20, 0 <= 격자 속 수의 값 <= 100

data = [list(map(int, input().split())) for _ in range(20)]
ans = 0
for i in range(20):
    for j in range(20):
        if j < 17:
            ans = max(data[i][j]*data[i][j+1]*data[i][j+2]*data[i][j+3], ans)
            if i < 17:
                ans = max(data[i][j]*data[i+1][j+1]*data[i+2][j+2]*data[i+3][j+3], ans)
        if i < 17:
            ans = max(data[i][j]*data[i+1][j] * data[i+2][j]*data[i+3][j], ans)
            if j > 2:
                ans = max(data[i][j]*data[i+1][j-1]*data[i+2][j-2]*data[i+3][j-3], ans)
print(ans)

간단히 풀 수 있는 문제로 어떤 위치에서 위, 아래, 왼쪽, 오른쪽, 대각선으로 연속된 4개의 수의 곱 중 최댓값을 찾는 문제이다.

중요한 점은 위를 확인하면 아래를, 오른쪽을 확인하면 왼쪽을, 오른쪽 아래 대각선을 확인하면 왼쪽 위를, 왼쪽 아래 대각선을 확인하면 오른쪽 위 대각선을 확인할 필요가 없다는 것이다.

위의 코드는 순서대로 오른쪽, 오른쪽 아래, 위, 왼쪽 아래를 확인한다. (코드가 어렵지 않기 때문에 자세하게 설명하지는 않겠다.)