이 문제는 딱 처음 봤을때 당연히 2차원 배열을 만들고, 답을 하나하나 찾아가는 식으로 풀어야 하는줄 알았는데,,, 생각해보니 해당 순서의 값만 알아내면 될 것 같았다! 표의 모든 값을 알아내는 것이 무의미하게 보였기 때문에 "어떻게 하면 순서로 값을 유추해낼 수 있을 것인가"에 초점을 맞추었다.
일단 대각선을 기준으로 for문을 작성하였고, 대각선 안에서 지그재그로 바뀌는 순서들은 생각하지 않았다. 대각선 안쪽의 순서는 그냥 대각선이 홀수번째/ 짝수번째인지에 따라 오른쪽 위로 향하는지/ 왼쪽 아래로 향하는지만 바뀌는 것이었기 때문이다. 중요한 것은 대각선이 바뀔 때의 숫자 처리였는데, 나는 대각선의 숫자들 중 가장 작은 숫자가 1, 1+1, 1+1+2+3, 1+1+2+3+4...로 증가함에 초점을 두고 코드를 작성하였다. X에서부터 역순으로 빼나가며 해당 대각선을 구했고, 대각선만 구하면 금방 풀리는 문제였다.
#include <stdio.h>
int main() {
int M = 1, x, X;
scanf("%d", &x);
X = x - 1;
for (int i = 1; X > 0; i++) {
X -= i;
M++;
}
if (X < 0) {
M--;
X += M;
}
if (M % 2 == 1) {
printf("%d/%d", M - X, X + 1);
}
else {
printf("%d/%d", X + 1, M - X);
}
return 0;
}