문제

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

분석/설계

최대 넓이를 가지는 가로 * 세로를 구하고 

최소 넓이를 가지는 가로*세로를 구하여 최대 넓이 - 최소 넓이 빼주고

거기에 참외수를 곱하여 방식으로 처음에 생각하고 접근하였습니다.

 

1. 입력받은 문자열을 각각의 문자로 쪼개 확인합니다.

2. 최대 넓이를 가지는 가로, 세로의 길이 각 입력 값을 받아 방향에 따라 각각의 최대 값을 구해주면 됩니다.

3. 최소 넓이는 꺽이는 부분을 고려하여, 아래와 같이 정의하고 i 위치에따른 이전 변과 다음 변의 방향이 같으면

    i는 최소 넓이를 구하는 가로 또는 세로 중에 하나이므로 이를 저장합니다.

4. 마지막으로 구해진 최대, 최소 가로와 세로 값 그리고 참외 수를 곱해서 결과 값을 구합니다.

구현 코드

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

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int K = Integer.parseInt(br.readLine());
		int maxHeight = 0;
		int maxWidth = 0;
		int minHeight = 0;
		int minWidth = 0;
		
		int[] dirArr = new int[6];
		int[] distArr = new int[6];
		
		for(int i=0; i<6; i++) { // 1. 입력받은 문자열을 각각의 문자로 쪼개 확인합니다.
			String[] input = br.readLine().split(" ");
			dirArr[i] = Integer.parseInt(input[0]);
			distArr[i] = Integer.parseInt(input[1]);
			
            // 2. 최대 넓이를 가지는 가로, 세로의 길이 각 입력 값을 받아 방향에 따라 각각의 최대 값을 구해주면 됩니다.
			if (dirArr[i] == 1 || dirArr[i] == 2) { 
				maxWidth = Math.max(maxWidth, distArr[i]);
			} else {
				maxHeight = Math.max(maxHeight, distArr[i]);
			}
		}
			
        // 3. 최소 넓이는 꺽이는 부분을 고려하여, 아래와 같이 정의하고 i 위치에따른 이전 변과 다음 변의 방향이 같으면
        // i는 최소 넓이를 구하는 가로 또는 세로 중에 하나이므로 이를 저장합니다.
		for(int i=0; i<6; i++) { // 최소 넓이를 가진 넓이를 구한다.
			// i를 최소 넓이의 가로 또는 세로라고 가정한다.
			int before = (i+5) % 6; 
			int after  = (i+1) % 6;
			
			if (dirArr[before] == dirArr[after]) { // i 기준으로 이전과 다음에 나올 변의 방향이 같으면
				if (dirArr[i] == 1 || dirArr[i] == 2) { // 방향에 따라 가장 작은 크기 가로, 세로 
					minWidth = distArr[i];
				} else {
					minHeight = distArr[i];
				}
			}
		}
		
        // 4. 마지막으로 구해진 최대, 최소 가로와 세로 값 그리고 참외 수를 곱해서 결과 값을 구합니다.
		int result = (maxHeight * maxWidth - minHeight * minWidth) * K; // (최대 넓이 - 최소 넓이) * 참외 개수 
		System.out.println(result);
	}
}

정리

최소 넓이의 가로 세로를 어떤식으로 기준을 잡고 구할지가 쉽게 떠오르지 않습니다.

문제에 주어진 조건을 잘 확인하고 고민해봐야합니다.

참고

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

'Algorithm > 구현' 카테고리의 다른 글

[백준] 배열돌리기 1  (0) 2022.12.23
[백준] 마인크래프트  (0) 2022.12.23
괄호의 값  (1) 2022.12.14
구현 - 문자열 재정렬  (0) 2022.03.17

+ Recent posts