알고리즘공부(Algorithm Study)/문제풀이(ProblemSolving)

백준 2477 java - 참외밭(기하)

Chann._.y 2022. 5. 18.
728x90

문제, 입출력, 테스트케이스

 

<문제 풀이/접근과정>
1. ㄱ의 모양은 상관이 없다. 임의의 위치에서 반시계방향으로 돌기 때문에 ㄱ방향보다 중요한 것은 움푹패인 곳이 어디냐이다.
2. 원형큐 개념으로 접근하면 움푹패인 곳을 파악할 수 있는 방법은 두 가지가 있다(한 가지는 스터디의 굇수분이 유도한 개념) 
2-1 움푹패인곳의 길이는 이전 배열의 선분과 다음 배열의 선분의 수직이다 -> 1 3 1 / 1 4 1 / 2 3 2 / 2 4 2 / 3 1 3 / 3 2 3 / 4 1 4 / 4 2 4
2-2 가장 긴 가로, 세로 변은 붙어 있을 수 밖에 없다. 가장긴 선분 다음의 +2, +3번째 인덱스의 선분이 바로 움푹패인 곳이다.
3. 구현은 모듈러로 해도 되지만 그냥 하드코딩으로 짰다.

<소스 코드>

package boj;

import java.util.Scanner;

public class Boj_2477 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int count = sc.nextInt();
        int arr[][] = new int[8][2];
        int maxWidth = 0; 
        int maxHeight = 0; 
        int tempWidth = 0;
        int tempHeight = 0;
        
        for (int i = 1; i < 7; i++) {
            arr[i][0] = sc.nextInt();
            arr[i][1] = sc.nextInt();
            if(arr[i][0] < 3) {
                maxWidth = Math.max(arr[i][1], maxWidth);
            }else {
                maxHeight = Math.max(arr[i][1], maxHeight);
            }
        }
        arr[0][0] = arr[6][0];
        arr[0][1] = arr[6][1];
        arr[7][0] = arr[1][0];
        arr[7][1] = arr[1][1];
        
        
        for (int i = 1; i < 7; i++) {
            if(arr[i-1][0] == arr[i+1][0] && arr[i][0] <3) {
                tempWidth = arr[i][1];
            }else if(arr[i-1][0] == arr[i+1][0] && arr[i][0] >= 3) {
                tempHeight = arr[i][1];
            }
        }
        System.out.println((maxWidth * maxHeight - tempWidth*tempHeight) * count);
        sc.close();
    }
}

 

 

728x90

댓글