https://www.acmicpc.net/problem/2477
육각형 도형에서 자라는 참외의 개수를 구하라
K : $1m^2$에 자라는 참외의 개수
임의의 한 꼭지점에서 시작하여 반시계 방향으로 변의 방향과 길이가 주어짐
ex) 2 10
-> 서쪽으로 10만큼 그으세요 == 가로 10짜리 선 그리기
동쪽 : 1
서쪽 : 2
남쪽 : 3
북쪽 : 4
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int K = Integer.parseInt(st.nextToken());
int[]arr = new int[6];
int wLongIdx = 5;
int hLongIdx = 5;
for (int i = 0; i < 6; i++) {
st = new StringTokenizer(br.readLine());
int direction = Integer.parseInt(st.nextToken());
int length = Integer.parseInt(st.nextToken());
arr[i] = length;
if (direction == 1 || direction == 2) {
if (arr[wLongIdx] < arr[i]) {
wLongIdx = i;
}
}
if (direction == 3 || direction == 4) {
if (arr[hLongIdx] < arr[i]) {
hLongIdx = i;
}
}
}
int wMinusIdx = wLongIdx - 1;
if (wMinusIdx == -1) {
wMinusIdx = 5;
}
int hMinusIdx = hLongIdx - 1;
if (hMinusIdx == -1) {
hMinusIdx = 5;
}
int hShort = arr[hLongIdx] - Math.min(arr[wMinusIdx], arr[(wLongIdx + 1)%6]);
int wShort = arr[wLongIdx] - Math.min(arr[hMinusIdx], arr[(hLongIdx + 1)%6]);
int bigRect = arr[wLongIdx] * arr[hLongIdx];
int smallRect = hShort * wShort;
System.out.println((bigRect - smallRect) * K);
}
}
큰 사각형과 작은 사각형의 면적을 구하는 것이 핵심 포인트입니다.
작은 사격형의 세로변의 길이를 구하는 방법은,
가로로 가장 긴 변(160)에 붙은 세로로 긴 변(50)과 짧은 변(30)의 차를 구하면 알 수 있습니다.
마찬가지로 작은 사격형의 가로변의 길이를 구하는 방법은,
세로로 가장 긴 변(50)에 붙은 가로로 긴 변(160)과 짧은 변(100)의 차를 구하면 알 수 있습니다.
wLongIdx와 hLongIdx의 초기값을 0으로 주고 시작하였는데, 그러면 0번째로 들어온 값이 가로와 세로를 통틀어 가장 큰 값이 되는 경우 변경되지 않는 에러가 발생한다.
-> 초기값에 유의하자!
[Baekjoon] 백준 1012 유기농배추 (S2^ / BFS) - Java (0) | 2023.02.17 |
---|---|
[Baekjoon] 백준 2667 단지번호붙이기 (S1^ / BFS) - Java (0) | 2023.02.16 |
[SWEA] 7733. 치즈 도둑 (D4 / BFS) - Java (0) | 2023.02.16 |
[Baekjoon] 백준 1952 탑 (G5^ / 스택) - java (0) | 2023.02.14 |
[SWEA] 1954 달팽이 숫자 (D2 / 구현) - Java (0) | 2023.02.09 |