본문 바로가기

알고리즘 문제풀이

백준2477-참외밭 java

728x90
package A0209;
import java.util.*;
/*
총 4가지 경우가 있으며 각각 방향으로 들어오는 숫자의 조합의 갯수가 다 다르다 
-> 이것을 기준으로 구분한다. 

큰 사각형 - 작은사각형으로 해당 넓이를 구한다.
작은 사각형의 가로, 세로는 방향으로 들어오는 숫자의 양옆에 들어오는 숫자로 구별한다.

*/
public class B2477_참외밭 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		class Pair{
			int dir;
			int len;
			Pair(int dir, int len) {
				this.dir = dir;
				this.len = len;
			}
		}
		
		int num = sc.nextInt();
		
		int[] mem = new int[7];
		Pair[] pair = new Pair[7];
		
		for(int i=1; i<=6; i++) {
			int tmpdir = sc.nextInt();
			int tmplen = sc.nextInt();
			mem[tmpdir]++;								//모양체크 
			pair[i] = new Pair(tmpdir, tmplen);			
		}
		

		
		int biggaro = 0;
		int bigsero = 0;
		int mingaro = 0;
		int minsero = 0;
		
		if(mem[1]==2&&mem[2]==1&&mem[3]==1&&mem[4]==2) {
			//1번경우
			for(int i=1; i<=6; i++) {
				int leftidx = i-1;
				int rightidx = i+1;
				if(leftidx==0)leftidx=6;
				if(rightidx==7)rightidx=1;
				
				if(pair[i].dir==2)biggaro=pair[i].len;
				else if(pair[i].dir==3)bigsero=pair[i].len;
				else if(pair[i].dir==4) {
					if(pair[leftidx].dir==1 && pair[rightidx].dir==1) {
						minsero = pair[i].len;
					}
				}else if(pair[i].dir==1) {
					if(pair[leftidx].dir==4 && pair[rightidx].dir==4) {
						mingaro = pair[i].len;
					}
				}
			}
			
		}else if(mem[1]==2&&mem[2]==1&&mem[3]==2&&mem[4]==1) {
			//2번 경우
			for(int i=1; i<=6; i++) {
				int leftidx = i-1;
				int rightidx = i+1;
				if(leftidx==0)leftidx=6;
				if(rightidx==7)rightidx=1;
				
				if(pair[i].dir==2)biggaro=pair[i].len;
				else if(pair[i].dir==4)bigsero=pair[i].len;
				else if(pair[i].dir==3) {
					if(pair[leftidx].dir==1 && pair[rightidx].dir==1) {
						minsero = pair[i].len;
					}
				}else if(pair[i].dir==1) {
					if(pair[leftidx].dir==3 && pair[rightidx].dir==3) {
						mingaro = pair[i].len;
					}
				}
			}
			
		}else if(mem[1]==1&&mem[2]==2&&mem[3]==2&&mem[4]==1) {
			//3번경우
			for(int i=1; i<=6; i++) {
				int leftidx = i-1;
				int rightidx = i+1;
				if(leftidx==0)leftidx=6;
				if(rightidx==7)rightidx=1;
				
				if(pair[i].dir==1)biggaro=pair[i].len;
				else if(pair[i].dir==4)bigsero=pair[i].len;
				else if(pair[i].dir==3) {
					if(pair[leftidx].dir==2 && pair[rightidx].dir==2) {
						minsero = pair[i].len;
					}
				}else if(pair[i].dir==2) {
					if(pair[leftidx].dir==3 && pair[rightidx].dir==3) {
						mingaro = pair[i].len;
					}
				}
			}
			
		}else if(mem[1]==1&&mem[2]==2&&mem[3]==1&&mem[4]==2) {
			//4번경우
			for(int i=1; i<=6; i++) {
				int leftidx = i-1;
				int rightidx = i+1;
				if(leftidx==0)leftidx=6;
				if(rightidx==7)rightidx=1;
				
				if(pair[i].dir==1)biggaro=pair[i].len;
				else if(pair[i].dir==3)bigsero=pair[i].len;
				else if(pair[i].dir==4) {
					if(pair[leftidx].dir==2 && pair[rightidx].dir==2) {
						minsero = pair[i].len;
					}
				}else if(pair[i].dir==2) {
					if(pair[leftidx].dir==4 && pair[rightidx].dir==4) {
						mingaro = pair[i].len;
					}
				}
			}
		}
		
		int result = biggaro*bigsero - mingaro*minsero;
		System.out.println(result*num);
	}
}

'알고리즘 문제풀이' 카테고리의 다른 글

백준7576 - 토마토 java  (0) 2022.02.26
백준2491-수열 java  (0) 2022.02.26
백준2309-일곱난쟁이 java  (0) 2022.02.26
백준2304-창고다각형 java  (0) 2022.02.26
백준2116-주사위쌓기 java  (0) 2022.02.26