AngelPlayer`s Diary

링크

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

 

2477번: 참외밭

첫 번째 줄에 1m2의 넓이에 자라는 참외의 개수를 나타내는 양의 정수 K (1 ≤ K ≤ 20)가 주어진다. 참외밭을 나타내는 육각형의 임의의 한 꼭짓점에서 출발하여 반시계방향으로 둘레를 돌면서 지

www.acmicpc.net

 

 

 

문제 해석

육각형 도형에서 자라는 참외의 개수를 구하라

 

K : $1m^2$에 자라는 참외의 개수

임의의 한 꼭지점에서 시작하여 반시계 방향으로 변의 방향과 길이가 주어짐

ex) 2 10

-> 서쪽으로 10만큼 그으세요 == 가로 10짜리 선 그리기

 

동쪽 : 1

서쪽 : 2

남쪽 : 3

북쪽 : 4

 

 

코드

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int K = Integer.parseInt(st.nextToken());
		
		int[]arr = new int[6];
		int wLongIdx = 5;
		int hLongIdx = 5;
		
		for (int i = 0; i < 6; i++) {
			st = new StringTokenizer(br.readLine());
			
			int direction = Integer.parseInt(st.nextToken());
			int length = Integer.parseInt(st.nextToken());
			
			arr[i] = length;
			if (direction == 1 || direction == 2) {
				if (arr[wLongIdx] < arr[i]) {
					wLongIdx = i;
				}
			}
			
			if (direction == 3 || direction == 4) {
				if (arr[hLongIdx] < arr[i]) {
					hLongIdx = i;
				}
			}
		}
		
		int wMinusIdx = wLongIdx - 1;
		if (wMinusIdx == -1) {
			wMinusIdx = 5;
		}
		
		int hMinusIdx = hLongIdx - 1;
		if (hMinusIdx == -1) {
			hMinusIdx = 5;
		}
		
		int hShort = arr[hLongIdx] - Math.min(arr[wMinusIdx], arr[(wLongIdx + 1)%6]);
		int wShort = arr[wLongIdx] - Math.min(arr[hMinusIdx], arr[(hLongIdx + 1)%6]);
		
		int bigRect = arr[wLongIdx] * arr[hLongIdx];
		int smallRect = hShort * wShort;
		
		System.out.println((bigRect - smallRect) * K);
	}
}

 

 

 

코드 해석

큰 사각형과 작은 사각형의 면적을 구하는 것이 핵심 포인트입니다. 

 

작은 사격형의 세로변의 길이를 구하는 방법은,

가로로 가장 긴 변(160)에 붙은 세로로 긴 변(50)과 짧은 변(30)의 차를 구하면 알 수 있습니다.

 

마찬가지로 작은 사격형의 가로변의 길이를 구하는 방법은,

세로로 가장 긴 변(50)에 붙은 가로로 긴 변(160)과 짧은 변(100)의 차를 구하면 알 수 있습니다.

 

 

 

발생한 문제 & 해결 방안

wLongIdx와 hLongIdx의 초기값을 0으로 주고 시작하였는데, 그러면 0번째로 들어온 값이 가로와 세로를 통틀어 가장 큰 값이 되는 경우 변경되지 않는 에러가 발생한다.

-> 초기값에 유의하자!

 

 

 

 

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band