으하하 공부일기
[SWEA] - 1493. 수의 새로운 연산 (D3) 본문
[문제]

점 (x,y)에 할당된 수는 #(x,y)로 나타낸다.
예를 들어 #(1,1) = 1, #(2,1)=3, #(2,2) = 5, #(4,4) = 25이다.
반대로 수 p가 할당된 점을 &(p)로 나타낸다.
예를 들어 &(1) = (1,1), &(3) = (2,1), &(5) = (2,2), &(25) = (4,4)이다.
두 점에 대해서 덧셈을 정의한다. 점 (x,y)와 점 (z,w)를 더하면 점 (x+z, y+w)가 된다.
즉, (x,y) + (z,w) = (x+z, y+w)로 정의한다.
우리가 해야 할 일은 수와 수에 대한 새로운 연산 ★를 구현하는 것으로, p★q는 #(&(p)+&(q))으로 나타난다.
예를 들어, &(1)=(1,1), &(5) = (2,2)이므로, 1★5 = #(&(1)+&(5)) = #((1,1)+(2,2)) = #(3,3) = 13이 된다.
[입력]
첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 두 정수 p,q(1 ≤ p, q ≤ 10,000)가 주어진다.
[출력]
각 테스트 케이스마다 ‘#t’(t는 테스트 케이스 번호를 의미하며 1부터 시작한다)를 출력하고, 각 테스트 케이스마다 p★q의 값을 출력한다.

문제 풀기
1493. 수의 새로운 연산
[풀이]
- 점의 좌표를 구하는 &()를 수행할 메소드 and와, 좌표를 통해 값을 구하는 #()를 수행할 메소드 hash를 구현한다
import java.util.Scanner;
class Solution {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
for(int tc=1; tc<=t; tc++) {
int a = sc.nextInt();
int b = sc.nextInt();
int xy[] = and(a);
int zw[] = and(b);
int xyzw[] = {xy[0] + zw[0], xy[1] + zw[1]};
int result = hash(xyzw);
System.out.format("#%d %d\n", tc, result);
}
}
public static int[] and(int a) {
int cnt = 1;
for(int i=1; ; i++) {
for(int x=1, y=i; x<=i; x++, y--) {
if(a==cnt)
return new int[] {x, y};
cnt++;
}
}
}
public static int hash(int[] a) {
int cnt = 1;
for(int i=1; ; i++) {
for(int x=1, y=i; x<=i; x++, y--) {
if(a[0] == x && a[1] == y)
return cnt;
cnt++;
}
}
}
}
'SWEA > D3' 카테고리의 다른 글
[SWEA] - 1873. 상호의 배틀필드 (D3) (0) | 2022.05.06 |
---|---|
[SWEA] - 1860. 진기의 최고급 붕어빵 (D3) (0) | 2022.05.06 |
[SWEA] - 1491. 원재의 벽 꾸미기 (D3) (0) | 2022.05.03 |
[SWEA] - 1289. 원재의 메모리 복구하기 (D3) (0) | 2022.05.03 |
[SWEA] - 1244. [S/W 문제해결 응용] 2일차 - 최대 상금 (D3) (0) | 2022.04.29 |