문제풀이
문제는 크게 각 수의 합을 구하고 비교하는 데에 있음.
첫 번째, 비교할 때 for문을 사용한다. 각 행의 합을 구하는 것, 각 열의 합을 구하는 것, 대각선의 합을 구하는 것. 이렇게 3가지의 합을 구해야 함.
두 번째, 각각의 최댓값을 비교하여 마지막 최댓값을 비교해야 함.
첫 번째의 for문 사용은, 아래와 같이 행에 들어가는 변수와 열에 들어가는 변수를 바꿔서 처리하면 각각 행 기준으로, 그리고 열 기준으로 더할 수 있음. 따라서 아래와 같이 사용해야 함.
for (int i=0; i<MAX; i++)
{
r=0;
for (int j=0; j<MAX; j++)
{
r+=map[i][j];
}
if (r>=r_max) r_max=r;
c=0;
for (int j=0; j<MAX; j++)
{
c+=map[j][i];
}
if (c>=c_max) c_max=c;
}
그리고 대각선은 아래처럼 각각 변수에서 [a++][b++] 등으로 행과 열이 하나씩 증가하거나 감소하는 코드를 사용할 수 있음. 다만 처음에 실수한 게 map[a++][a++]; 등으로 코드를 구성하다 보니 행에 있는 a가 1이었다고 하면 열에서 이 값을 받을 때 2로 받게 되는 것임. 그래서 독립적인 변수를 사용하는 게 맞음.
for (int i=0; i<MAX; i++)
{
diag_1+=map[a++][b++];
}
for (int i=0; i<MAX; i++)
{
diag_2+=map[tmp--][c++];
}
소스코드
#include <iostream>
#include <algorithm>
#include <vector>
#define MAX 100
using namespace std;
int tc,n;
int map[MAX][MAX];
int r,c,diag_1,diag_2;
int r_max=-1,c_max=-1,diag_max=-1;
int ans;
void input()
{
for (int i=0; i<MAX; i++)
{
for (int j=0; j<MAX; j++)
{
cin>>map[i][j];
}
}
}
void count_r_c()
{
/* row */ /* column */
c_max=0;
r_max=0;
for (int i=0; i<MAX; i++)
{
r=0;
for (int j=0; j<MAX; j++)
{
r+=map[i][j];
}
if (r>=r_max) r_max=r;
c=0;
for (int j=0; j<MAX; j++)
{
c+=map[j][i];
}
if (c>=c_max) c_max=c;
}
}
void diag_func()
{
diag_1=0;
diag_2=0;
diag_max=0;
int a=0;
int b=0;
int c=0;
int tmp=MAX-1;
//inc
for (int i=0; i<MAX; i++)
{
diag_1+=map[a++][b++];
}
for (int i=0; i<MAX; i++)
{
diag_2+=map[tmp--][c++];
}
if (diag_1>=diag_2) diag_max=diag_1;
else diag_max=diag_2;
}
int main()
{
//freopen("input.txt","rt",stdin);
for (int i=0; i<10; i++)
{
cin>>tc;
input();
count_r_c();
diag_func();
if (r_max>=c_max)
{
ans=r_max;
}
else
{
ans=c_max;
}
if (diag_max>=ans) ans=diag_max;
cout<<"#"<<i+1<<" "<<ans<<endl;
}
return 0;
}
'C C++ > C C++ 알고리즘 문제 기타' 카테고리의 다른 글
[C/C++] 유쾌한 점퍼 (Jolly Jumper) (0) | 2022.09.27 |
---|---|
[C/C++] swea 1220. [S/W 문제해결 기본] 5일차 - Magnetic (1) | 2022.09.25 |
[C/C++] swea 2805. 농작물 수확하기 (1) | 2022.09.21 |
[C/C++] 백준 1547번 공 (0) | 2022.09.17 |
[C/C++] 백준 7568번 덩치 (0) | 2022.09.17 |
댓글