[백준(Baekjoon)][자바(java)] 2477 : 참외밭 / 기하 1

728x90

 

 

 

https://www.acmicpc.net/problem/2477

 

2477번: 참외밭

첫 번째 줄에 1m2의 넓이에 자라는 참외의 개수를 나타내는 양의 정수 K (1 ≤ K ≤ 20)가 주어진다. 참외밭을 나타내는 육각형의 임의의 한 꼭짓점에서 출발하여 반시계방향으로 둘레를 돌면서 지

www.acmicpc.net

 

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) throws Exception {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int k = Integer.parseInt(br.readLine()), a = 6, i;
		int len[] = new int[a];
		for (i = 0; i < a; ++i)
			len[i] = Integer.parseInt(br.readLine().split(" ")[1]);
		br.close();

		int w_val, h_val, w_idx, h_idx, x_val, y_val, l;
		w_val = h_val = 0;
		w_idx = h_idx = -1;
		for (i = 0; i < a; i += 2) {
			l = len[i];
			if (h_val < l) {
				h_val = l;
				h_idx = i;
			}
		}
		for (i = 1; i < a; i += 2) {
			l = len[i];
			if (w_val < l) {
				w_val = l;
				w_idx = i;
			}
		}
		x_val = len[(h_idx + 3) % a];
		y_val = len[(w_idx + 3) % a];
		
		System.out.println((w_val * h_val - x_val * y_val) * k);
	}
}

 

입력값이 반시계방향으로 둘레를 돌며 지나는 변의 길이이므로
어느 점에서 출발하든 상관 없다. 고로 입력값에서 방향은 고려하지 않았다.

문제에서 제시된 밭의 모양은 ㄱ자(또는 회전한) 모양이고, 둘레 돌 때 코너에서 90도씩 꺾인다
가로 변(선분)과 세로 변 길이가 번갈아가며 입력된다
따라서 짝수/홀수 번째에 위치한 변들은 같은 종류이다

 

인덱스 방향 길이 종류
0 4 50 세로
1 2 160 가로
2 3 30 세로
3 1 60 가로
4 3 20 세로
5 1 100 가로

 

또한 큰 직사각형의 가로/세로 길이 (w, h) 는 제일 길며 나머지 두 길이의 합이다
그리고 작은 직사각형의 가로/세로 길이 (x, y) w, h 가 위치한 인덱스에서 각각 3칸 떨어진 인덱스의 값이다
( h 에서 3칸 => x ) ( w 에서 3칸 => y )

 

인덱스 방향 길이  
0 4  50   h       ┐
1 2  160   w   ┐│
2 3  30         │ │
3 1  60   x   │ ┘
4 3  20   y   ┘
5 1  100   

( w * h ) - ( x * y ) = 밭의 넓이

 

1m^2 당 자라는 참외의 개수가 k 이므로,
밭에서 자라는 참외의 수는 (밭의 넓이) * k 이다

 

 

반응형