알고리즘 문제 해결/Project Euler

[수학] 프로젝트 오일러 11번 문제

jmkimmessi 2021. 11. 21. 22:36
반응형

https://euler.synap.co.kr/problem=11

 

11번 문제

20×20 격자에서 연속된 네 수의 곱 중 최댓값

euler.synap.co.kr

 

 

 

문제 해결 알고리즘

 

브루트 포스 알고리즘으로 푼다. 세로, 가로 대각선 2개 4개의 곱을 전부 비교해서 최댓값을 출력한다.

 

 

소스 코드

 

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


long max_result = 0;
long arr[20][20];


int main(){
	
	for(int i=0;i<20;i++){
		for(int j=0;j<20;j++){
			cin >> arr[i][j];
		}
	}
	
	for(int i=0;i<20;i++){
		for(int j=0;j<20;j++){
			
			long v = 1, h = 1, d_1 = 1, d_2 = 1;
			
			for(int k=0;k<4;k++){
				if(i <= 16) v *= arr[i + k][j];
				if(j <= 16) h *= arr[i][j + k];
				if(i <= 16 && j <= 16) d_1 *= arr[i + k][j + k];
        if(i >= 3 && j <= 16) d_2 *= arr[i - k][j + k];
			}
			
			max_result = max(max(max_result, v), max(max(h, d_1), d_2));
			
		}
	}
	
	cout << max_result << '\n';

  for(int i=0;i<20;i++){
		for(int j=0;j<20;j++){
			cout << arr[i][j] << ' ';
		}
    cout << '\n';
	}
}
반응형