DOTY

1) 백준 2477 - 참외밭 본문

Algorithm/Math

1) 백준 2477 - 참외밭

증식세포 2023. 2. 24. 15:57
728x90
반응형

2477번: 참외밭 (acmicpc.net)

 

2477번: 참외밭

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

www.acmicpc.net


머리로는 대충 떠오르는데 예외 처리 하는데 하나씩 놓치는거 보면 머리가 안굴러가는 것 같기도..ㅠㅠ

#include <bits/stdc++.h>

using namespace std;

int main(void) {
	int K;
	cin >> K;
	pair<int, int> way_check[6];
	
	int way, length;
	int max_H = 0;
	int max_V = 0;
	int answer = 0;
	for(int i = 0; i < 6; i++) {
		cin >> way >> length;
		way_check[i] = make_pair(way, length);
		if(way == 1 || way == 2) {
			if(length > max_H) {
				max_H = length;
			}
		}
		else if(way == 3 || way == 4) {
			if(length > max_V) {
				max_V = length;
			}
		}
	}
	for(int i = 0; i < 4; i++) {
		if(way_check[i].first == way_check[i+2].first) {
			answer = max_H * max_V - way_check[i+1].second * way_check[i+2].second;
			break;
		}
	}
	if(way_check[0].first == way_check[2].first && way_check[1].first == way_check[5].first) {
		answer = max_H * max_V - way_check[0].second * way_check[1].second;
	}
	else if(way_check[0].first == way_check[4].first && way_check[1].first == way_check[5].first) {
		answer = max_H * max_V - way_check[0].second * way_check[5].second;
	}
	
	cout << answer * K << endl;
}

꼭지점이 6개 밖에 안되니까 pair 배열로 저장해뒀다.

처음 생각한 아이디어는 무조건 계단식 모양으로 나오므로 way_check.first가 연달아서 "ABAB" 형태로 나온다.

이때 "A [BA] B" 대괄호 부분이 바로 핵심부분.

해당 길이를 곱해서 빠지는 직사각형 넓이를 구하여 가장 큰 사각형에서 뺀다.

 

예외 처리 1. 0번 밭의 경계와 2번 밭의 경계의 방향이 같고 1번 밭의 경계와 5번 밭의 경계의 방향이 같은 경우

예외 처리 2. 0번 밭의 경계와 4번 밭의 경계의 방향이 같고 1번 밭의 경계와 5번 밭의 경계의 방향이 같은 경우

 

두 예외 처리의 경우에는 후처리를 통해 answer을 구해냈다.

 

728x90
반응형
Comments