

1. 문제 풀이 아이디어
- 이동 횟수가 작은 좌표를 우선적으로 다른 좌표 방향으로 이동시킨 후, 나머지 이동 횟수를 비교하여 문제를 해결할 수 있다.
2. 나의 정답 코드
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
long[][] n = new long[2][3];
for (int i = 0; i < 2; i++) {
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
for (int j = 0; j < 3; j++) {
n[i][j] = Long.parseLong(stringTokenizer.nextToken());
}
}
Arrays.sort(n, Comparator.comparingLong(a -> a[2]));
long[] result = new long[2];
for (int i = 0; i < 2; i++) {
long dif = Math.abs(n[1][i] - n[0][i]);
if (dif <= n[0][2]) {
result[i] = n[1][i];
n[0][2] -= dif;
} else {
if (n[1][i] > n[0][i]) {
result[i] = n[0][i] + n[0][2];
} else {
result[i] = n[0][i] - n[0][2];
}
n[0][2] = 0;
}
}
for (int i = 0; i < 2; i++) {
n[1][2] -= Math.abs(result[i] - n[1][i]);
}
if (n[1][2] < 0 || n[0][2] % 2 != n[1][2] % 2) {
System.out.println("impossible");
} else {
if (n[0][2] % 2 == 1)
System.out.println(result[0] + " " + (result[1] + 1));
else
System.out.println(result[0] + " " + result[1]);
}
bufferedReader.close();
}
}
3. 정리
- 입력을 받아 이동 횟수가 작은 좌표를 우선적으로 처리하기 위해 정렬한다.
- 좌표의 차이를 계산한 뒤, 차이가 첫 번째 플레이어의 이동 횟수보다 작으면 결과 좌표를 두 번째 플레이어의 좌표로 설정하고, 이동 횟수를 감소시킨다.
- 차이가 이동 횟수보다 크면, 첫 번째 플레이어의 좌표를 이동 횟수만큼 두 번째 플레이어 방향으로 이동시킨 결과를 저장한다.
- 이후 두 번째 플레이어의 남은 이동 횟수를 결과 좌표와의 차이로 감소시킨다.
- 두 번째 플레이어의 이동 횟수가 음수이거나, 두 플레이어의 남은 이동 횟수가 같은 홀짝이 아니라면
"impossible"
을 출력한다.
- 그렇지 않다면, 남은 이동 횟수가 짝수일 경우 결과 좌표를 그대로 출력하고, 홀수일 경우 y 좌표에 1을 더해 출력한다.
Share article