[백준]2477 참외밭 (자바)

Jihun·2022년 2월 11일
2

BOJ

목록 보기
5/29
post-thumbnail

문제

image

입력

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

출력

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

입출력 예

image

풀이

서쪽이나 동쪽방향의 선분을 가로, 북쪽이나 남쪽방향의 선분을 세로로 생각
1. 가장 긴 가로와 세로의 위치를 각각 구한다.
1. 가장 긴 가로 옆에 위치한 두 세로의 길이 차이가 빈 사각형의 세로가 된다.
1. 2번과 같은 원리로 가장 긴 세로 양 옆에 위치한 두 가로의 차이가 빈 사각형의 가로가 된다.
1. 2~3의 과정으로 구한 결과로 빈 사각형의 넓이를 구하고 큰 사각형의 넓이에서 빼주고 * N

코드

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 br = new BufferedReader(new InputStreamReader(System.in));
	    StringTokenizer st;
	    
	    int N = Integer.parseInt(br.readLine());
	    int[]arr = new int[6];
	    int MaxWidthI=0,MaxWidth=0,MaxHeight=0,MaxHeightI=0,d;
	    for(int i=0;i<6;i++) {
	    	st = new StringTokenizer(br.readLine());
	    	d = Integer.parseInt(st.nextToken());
	    	arr[i]=Integer.parseInt(st.nextToken());
			//가장 긴 가로의 길이와 위치 찾기
	    	if((d==1 || d==2)&& MaxWidth<arr[i]) {
	    		MaxWidth=arr[i];
	    		MaxWidthI=i;
	    	}
			//가장 긴 세로의 길이와 위치 찾기
	    	else if((d==3 || d==4)&& MaxHeight<arr[i]){
	    		MaxHeight=arr[i];
	    		MaxHeightI=i;
	    	}
	    }
	    
	    int right,left,minWidth,minHeight;
	    
	    if(MaxWidthI+1==6)right=0;
	    else right=MaxWidthI+1;
	    
	    if(MaxWidthI-1==-1)left=5;
	    else left=MaxWidthI-1;
	    //빈 사각형의 세로 길이
	    minHeight=Math.abs(arr[right]-arr[left]);

	    if(MaxHeightI+1==6)right=0;
	    else right=MaxHeightI+1;
	    
	    if(MaxHeightI-1==-1)left=5;
	    else left=MaxHeightI-1;
	    //빈 사각형의 가로 길이
	    minWidth=Math.abs(arr[right]-arr[left]);

	    System.out.println(((MaxWidth*MaxHeight)-(minHeight*minWidth)) * N);
	}
}
profile
slow and steady

1개의 댓글

comment-user-thumbnail
2023년 8월 19일

잘 보고 갑니다!

답글 달기