본문 바로가기
알고리즘/백준

백준 2477 참외밭 (JAVA 자바 풀이)

by Renechoi 2022. 12. 4.

백준 2477 참외밭 (JAVA 자바 풀이)

 


 

 

📌 문제 

1m2의 넓이에 자라는 참외의 개수와, 참외밭을 이루는 육각형의 임의의 한 꼭짓점에서 출발하여 반시계방향으로 둘레를 돌면서 지나는 변의 방향과 길이가 순서대로 주어진다. 이 참외밭에서 자라는 참외의 수를 구하는 프로그램을 작성하시오.

 

 

⚔ 입력

첫 번째 줄에 1m2의 넓이에 자라는 참외의 개수를 나타내는 양의 정수 K (1 ≤ K ≤ 20)가 주어진다. 참외밭을 나타내는 육각형의 임의의 한 꼭짓점에서 출발하여 반시계방향으로 둘레를 돌면서 지나는 변의 방향과 길이 (1 이상 500 이하의 정수) 가 둘째 줄부터 일곱 번째 줄까지 한 줄에 하나씩 순서대로 주어진다. 변의 방향에서 동쪽은 1, 서쪽은 2, 남쪽은 3, 북쪽은 4로 나타낸다.

 

 

📣 출력

첫째 줄에 입력으로 주어진 밭에서 자라는 참외의 수를 출력한다.

 

 

 

 


 

 

 

💎 문제 분석

 

 

큰 거에서 작은 걸 빼주면 간단한데 문제는 작은 거를 어떻게 구하느냐이다. 

 

큰 거는 max 값으로 쉽게 구할 수 있다. 

 

작은 사각형은 특징이 있는데 반드시 제일 큰 값 양 옆에 위치한다는 것이다. 가로나 세로나 동일하기 때문에 가장 큰 값의 양 변을 구해주면 작은 사각형이 나온다. 

 

if문을 분기해서 구할 수도 있지만 6이라는 제한된 숫자가 가진 특징을 사용해서 규칙을 발견할 수 있다. 

 

 

 

 

💡 코드 구현

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

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

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

		int melonCounts = Integer.parseInt(bufferedReader.readLine());

		int[] melonField = new int[6];
		for (int i = 0; i < 6; i++) {
			StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
			int direction = Integer.parseInt(stringTokenizer.nextToken());
			int length = Integer.parseInt(stringTokenizer.nextToken());
			melonField[i] = length;
		}

		int xMax = 0;
		int xMaxIndex = 0;
		int yMax = 0;
		int yMaxIndex = 0;

		for (int i = 0; i < 6; i++) {
			if (i % 2 == 0) {
				if (melonField[i] >= xMax) {
					xMax = melonField[i];
					xMaxIndex = i;
				}
			}
			if (i % 2 != 0) {
				if (melonField[i] >= yMax) {
					yMax = melonField[i];
					yMaxIndex = i;
				}
			}
		}
		
		int xSmall = Math.abs(melonField[Math.abs(xMaxIndex + 5) % 6] - melonField[Math.abs(xMaxIndex + 1) % 6]);
		int ySmall = Math.abs(melonField[Math.abs(yMaxIndex + 5) % 6] - melonField[Math.abs(yMaxIndex + 1) % 6]);
		System.out.println((xMax * yMax - xSmall * ySmall) * melonCounts);
	}
}

 

 

 

 

 

 

 

반응형