import java.io.*;
import java.util.*;
class Solution {
public static void main(String[] args) throws IOException {
int[][] map = new int[301][301];
int number = 1;
for (int i = 0; i <= 300; i++) {
for (int j = i; j >= 0; j--) {
map[i-j][j] = number;
number++;
}
}
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int t = 1; t <= T; t++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int p = Integer.parseInt(st.nextToken());
int q = Integer.parseInt(st.nextToken());
int x_idx = 0, y_idx = 0;
int x_idx2 = 0, y_idx2 = 0;
for (int i = 0; i <= 300; i++) {
for (int j = 0; j <= 300; j++) {
if (map[i][j] == p) {
x_idx = i;
y_idx = j;
}
if (map[i][j] == q) {
x_idx2 = i;
y_idx2 = j;
}
}
}
int x_result = x_idx + x_idx2 + 1;
int y_result = y_idx + y_idx2 + 1;
System.out.println("#" + t + " " + map[x_result][y_result]);
}
}
}
가장 중요한 부분은 어떻게 2차원 배열인 map안에 값을 넣을지 이다.
좌 상단에서 우 하단으로 어떻게 값을 넣어줄 것인지 알지 못하면 고민이 많이 필요하다.
보통은 좌 최상단이 (0, 0)인데 여기선 좌 최하단이 (0, 0)으로 간주되었다.
그래서 반대로 생각해야된다.
i는 열을 뜻하고 j는 행을 뜻한다.
map[i-j][j]의 식으로
map[0][0] = 1, map[0][1] = 2, map[1][0] = 3
map[0][2] = 4, map[1][1] = 5, map[2][0] = 6
이런식으로 값이 삽입된다.