알고리즘/BJ

[BJ] 백준 2477 참외밭 (JAVA)

9_yoon 2022. 2. 21. 22:48
728x90
반응형

문제

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

풀이 방법

처음에 살짝 헤맸던 문제였다. 그냥 단순히 예제만 보고 가로 중에 최대최소, 세로중에 최대최소 구하면 되는 줄 알았는데 아니였음;; 문제 제대로 읽자....
우선 나는 가장 큰 사각형에서 내부에 있는 작은 사각형을 빼주는 식으로 구현하려고 했다. 어디에서 시작하든 규칙은 방향이 A - B - C - D - C - D 순으로 나온다. 시작만 다르지 순서는 거의 동일함. (A, B가 긴변이고, D, C가 내부의 작은 사각형의 가로세로) 
그래서 생각한게 우선 가로 중에서 가장 큰 값, 세로 중 가장 큰 값을 찾은 후에 해당 인덱스에 +3을 해주는 것이였다.

제출 코드

public class BJ_2477_참외밭 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());

		int K = Integer.parseInt(st.nextToken());

		int hMax = 0, wMax = 0; //각 가로 세로의 최대 길이 저장
		int hMaxIdx = -1, wMaxIdx = -1; //가로 세로의 최대 길이의 인덱스 저장 

		int[] dirs = new int[6]; //순서대로 방향 저장
		int[] dist = new int[6]; //변의 길이 저장
 
		for (int i = 0; i < 6; i++) {
			st = new StringTokenizer(br.readLine());
			dirs[i] = Integer.parseInt(st.nextToken());
			dist[i] = Integer.parseInt(st.nextToken());
			if (dirs[i] == 1 || dirs[i] == 2) { //가로 방향이면
				if (hMax < dist[i]) { //가로에 해당하는 변수들에 최대값, 인덱스 저장
 					hMax = dist[i];
					hMaxIdx = i;
				}
			} else {//세로에 해당하는 변수들에 최대값, 인덱스 저장
				if (wMax < dist[i]) {
					wMax = dist[i];
					wMaxIdx = i;
				}
			}
		}
		int maxSquare = wMax * hMax; //전체 사각형의 넓이
		//각 인덱스의 +3을 하면 안에 있는 사각형의 길이를 가지고 있는 인덱스임
		int minSquare = dist[(wMaxIdx + 3) % 6] * dist[(hMaxIdx + 3) % 6]; 

		System.out.println((maxSquare-minSquare)*K);

	}

}

 

728x90
반응형