1493 수의 새로운 연산

Sungmin·2023년 11월 16일
0

SWEA 알고리즘

목록 보기
23/26

수의 새로운 연산 URL

Solution

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
이런식으로 값이 삽입된다.
profile
Let's Coding

0개의 댓글