이번 문제는 보자마자 아이디어가 떠올라 신나는 마음으로 눌렀다.
Baekjoon / Problem No. 2566 (최댓값)
Problem
<그림 1>과 같이 9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오. 예를 들어, 다음과 같이 81개의 수가 주어지면
| 1열 | 2열 | 3열 | 4열 | 5열 | 6열 | 7열 | 8열 | 9열 | |
| 1행 | 1 | 41 | 48 | 47 | 68 | 12 | 54 | 69 | 70 |
| 2행 | 40 | 86 | 42 | 67 | 8 | 23 | 88 | 22 | 55 |
| 3행 | 30 | 66 | 29 | 9 | 46 | 87 | 53 | 10 | 71 |
| 4행 | 16 | 5 | 13 | 24 | 65 | 11 | 86 | 56 | 28 |
| 5행 | 78 | 21 | 59 | 3 | 57 | 45 | 90 | 27 | 72 |
| 6행 | 4 | 60 | 20 | 58 | 25 | 6 | 84 | 26 | 52 |
| 7행 | 61 | 43 | 44 | 49 | 19 | 83 | 64 | 17 | 85 |
| 8행 | 77 | 15 | 75 | 2 | 74 | 50 | 82 | 18 | 73 |
| 9행 | 15 | 76 | 62 | 79 | 63 | 80 | 7 | 81 | 51 |
이들 중 최댓값은 90이고, 이 값은 5행 7열에 위치한다.
Input
첫째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 수가 주어진다. 주어지는 수는 100보다 작은 자연수 또는 0이다.
Output
첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.
Solution 1
이때까지 수많은 시간초과의 뒤통수를 맞아온 나이기에, 이번에는 본능적으로 2차원 배열 따위를 써서는 안된다는 걸 감지했다.
이 문제에서 바라는건 최댓값, 그리고 행과 열 뿐이다. 그말은 배열에 넣고 벡터에 넣고 자시고 할 필요도 없이 입력받을 때마다 이전에 입력받은 값과 지금 입력받은 값을 비교하여서 더 큰 값을 최댓값으로 저장하고, 그 행과 열 번호도 역시 저장하면 된다.
이 방식으로 하면 무려 실행시간이 0ms가 나온다.

이번엔 나의 승리다. 백준. 자세한 내용은 주석을 참고하라구.
#include <cstdio>
int main()
{
int i,j;
int mx, my = 1; // 최댓값이 있는 행, 열
int now, max = 0; // 각각 현재 입력되는 값, 최댓값을 저장하는 변수
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
scanf(" %d", &now);
if(max<=now) // 같은 값이 들어오는 경우를 위해 등호를 포함시킨다.
{
max = now;
mx = i+1;
my = j+1; // i가 0부터 시작하므로 +1을 하여 문제조건과 맞춰준다.
}
}
}
printf("%d\n", max);
printf("%d %d", mx, my);
}
Code

Review
그래도 나름 며칠동안 백준한테 당하기만했는데 아이디어가 한눈에 보이는 걸 보면 며칠사이에 조금씩 나아지고 있는게 아닐까? 라고 생각해본다. 뿌듯하다.
코딩 고수들 입장에서는 "뭐 이런걸 가지고" 겠지만, 지금의 나에게는 "이만큼 씩이나?" 니까.