자바로 백준 2477 풀기

hong030·2023년 3월 15일
0
  • 실버 2단계 문제

풀이)

가장 긴 가로변 옆에 달린 두 세로변의 차와,
가장 긴 세로변 옆에 달린 두 가로변의 차이를 곱하면 빼야 하는 사각형의 면적을 알 수 있다.
즉, 총 면적 = (가장 긴 가로변 가장 긴 세로변) - (가장 긴 가로변 옆에 달린 두 세로변의 차 가장 긴 세로변 옆에 달린 두 가로변의 차)
이 때 방향이 1, 2일 경우 가로, 3, 4일 경우 세로이다.

내 코드)

import java.io.*;
import java.util.*;

public class Backjoon2477 {
	public static void main(String[]args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		int K = Integer.parseInt(bf.readLine());
		
		//12는 가로다. 12 중 가장 긴 거 찾고, 그 옆에 붙은 세로들을 구한다.
		//34는 세로다. 34 중 가장 긴 거 찾고, 그 옆에 붙은 가로들을 구한다.
		
		int [][]input = new int[6][2];
		for(int i=0;i<6;i++) {
			StringTokenizer st = new StringTokenizer(bf.readLine());
			String dir = st.nextToken();
			String len = st.nextToken();
			input[i][0] = Integer.parseInt(dir);
			input[i][1] = Integer.parseInt(len);
		}
		
		int maxgaro=0;
		int maxsero=0;
		if((input[0][0]==1)||(input[0][0]==2))
			maxgaro = 0;
		else
			maxgaro = 1;
		
		if((input[0][0]==3)||(input[0][0]==4))
			maxsero = 0;
		else
			maxsero = 1;
		
		
		for(int i=0;i<6;i++) {
			if((input[i][0] == 1) || (input[i][0] == 2)) {
				if(input[maxgaro][1] < input[i][1])
					maxgaro = i;
			}if((input[i][0] == 3) || (input[i][0] == 4)) {
				if(input[maxsero][1] < input[i][1])
					maxsero = i;
			}
		}
		
		int smallgaro1 = maxgaro-1>=0?maxgaro-1:5;
		int smallgaro2 = maxgaro+1>5?0:maxgaro+1;
		int smallsero1 = maxsero-1>=0?maxsero-1:5;
		int smallsero2 = maxsero+1>5?0:maxsero+1;
		
		int a = Math.abs(input[smallsero2][1]-input[smallsero1][1]);
		int b = Math.abs(input[smallgaro2][1]-input[smallgaro1][1]);
		
		int result = ((input[maxgaro][1]*input[maxsero][1]) - (a*b))*K;
		
		System.out.println(result);

		
		
	}
}

profile
자바 주력, 프론트 공부 중인 초보 개발자. / https://github.com/hongjaewonP

0개의 댓글