JAVA/Coding Test

[JAVA] 백준 2477 참외밭_기하1

오늘도개발 2023. 3. 6. 19:38

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

 

2477번: 참외밭

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

www.acmicpc.net

 

 접근 : 

 

- 회전 하는 경우와 시작점이 무작위 임으로, 회전과 시작점을 사용하지 않는 방법을 사용해야한다.

 

- 변 길이를 반시계 방향으로 순서대로 입력 받으므로 이를 활용한다.

 

- 사각형의 넓이를 사용하면 회전 및 순서에 영향을 받지 않으므로 이 성질을 이용한다.

 

- 반시계 방향으로 받은 변 2개씩 곱하여 넓이를 구하면 특정 형태의 넓이가 나타난다.

 

- 이를 이용하여 넓이당 참외 수 와 특정 모양의 참외밭의 모양을 곱하여 결과를 출력한다.

 

 

- 이므로 참외밭의 참외수는 다음과 같다

 

 

 

 코드 구현 : 

 

import java.io.*;

public class Main {

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

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int n = Integer.parseInt(br.readLine());
		String[] inputs;
		int x = 0;
		int y = 0;
		int[] numbers = new int[6];

		int result = 0;
		int temp_result = 0;
		int temp_num = 0;
		
		// 각각의 변 길이 입력, 가장 큰 사각형의 x, y값 저장
		for (int i = 0; i < 6; i++) {
			inputs = br.readLine().split(" ");
			temp_num = Integer.parseInt(inputs[1]);
			numbers[i] = temp_num;

			if (inputs[0].equals("3") || inputs[0].equals("4")) {
				if (x < temp_num) x = temp_num;
			}else {
				if (y < temp_num) y = temp_num;
			}
		}
		
		//다음 반시계 방향 수와 곱
		for (int j = 0; j < 6; j++) {
			temp_result +=  numbers[j] * ((j == 5) ? numbers[0] : numbers[j + 1]);
		}

		result = n * (temp_result - (2 * x * y));

		System.out.println(result);
		br.close();
	}
}