https://www.acmicpc.net/problem/2477
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int K = Integer.parseInt(br.readLine());
int[] counts = new int[4];
List<Pair> list = new ArrayList<>();
for (int i = 0; i < 6; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int dir = Integer.parseInt(st.nextToken());
int distance = Integer.parseInt(st.nextToken());
list.add(new Pair(dir, distance));
counts[dir - 1]++;
}
int big = 1;
int small = 1;
for (int i = 0; i < 6; i++) {
Pair cur = list.get(i);
if (counts[cur.dir - 1] == 1) {
big *= cur.distance;
int prev = i - 1;
int next = i + 1;
if (prev < 0) {
prev = 5;
}
if (next > 5) {
next = 0;
}
int diff = Math.abs(list.get(prev).distance - list.get(next).distance);
small *= diff;
}
}
System.out.println(Math.abs(big - small) * K);
}
static class Pair {
int dir;
int distance;
Pair(int dir, int distance) {
this.dir = dir;
this.distance = distance;
}
}
}
면적 X K
를 구하는 문제이다.방향, 선의 길이
가 주어진다.A + B
로 구하는 법과 B - A
로 구하는 방법 두 경우가 있다.counts
배열을 활용하여 선분의 등장횟수가 한번인 선분을 구하면 된다.(B의 면적 - A의 면적) X K
를 구하면 된다.i = 0
, i = 5
두 경우에서 prev
와 next
는 각각 5, 0이 된다. 이 점을 유의해야 한다.전체 넓이 - 비어있는 부분의 넓이
로 답을 구해야된다는 것은 알고, 빠르게 구현하였으나 오류가 발생하였다.1 3 1 3
이 반복적으로 나오는 구간에서 두번쨰와 새번째 구간이 비어있는 공간이라고 생각하였으나, 역시 예외가 발생하였다.