No Rules Rules

참외밭 (feat. 백준, 2477번) 본문

생활/코테

참외밭 (feat. 백준, 2477번)

개발하는 완두콩 2022. 8. 3. 22:13
728x90
반응형

참외밭
https://www.acmicpc.net/problem/2477

 

2477번: 참외밭

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

www.acmicpc.net

반응형
// woohyeon.kim
// https://www.acmicpc.net/problem/2477
#include <iostream>
using namespace std;
int main() {
	ios::sync_with_stdio(false), cin.tie(NULL);
	pair<int, int> tmp[6];
	register int K, ans = 0;
	cin >> K;
	for (register int i = 0, n, v; i < 6; ++i)
		cin >> n >> v, tmp[i].first = n, tmp[i].second = v;
	for (register int i = 0; i < 6; ++i)
		if (tmp[i % 6].first == tmp[(i + 2) % 6].first && tmp[(i + 1) % 6].first == tmp[(i + 3) % 6].first) {
			ans = (tmp[i % 6].second + tmp[(i + 2) % 6].second) * (tmp[(i + 1) % 6].second + tmp[(i + 3) % 6].second);
			ans -= tmp[(i + 1) % 6].second * tmp[(i + 2) % 6].second;
			break;
		}
	cout << ans * K;
	return 0;
}
// *&)*@*

먼저 모든 참외밭은 다음중 하나에 속하게 됩니다.

  • 시작되는 꼭지점과는 상관없이 무조건 4개의 조건중 하나의 참외밭이 문제로 주어집니다.
  • 이때 공통점이 있습니다. 바로 가로가 2번 세로가 2번 연속된다는 것입니다.
  • 그리고 가로 2개의 길이의 합과 세로 2개의 길이의 합은 가로의 총 길이, 세로의 총 길이와 같습니다.
  • 즉 가로,세로,가로,세로 의 형태든 세로,가로,세로,가로 형태든 이것을 arr[0], arr[1], arr[2], arr[3] 이라고 한다면 (arr[0] + arr[2]) * (arr[1] * arr[3]) 은 사각형 전체의 넓이입니다. 또한 arr[1] * arr[2] 는 사각형 중 비어있는 공간입니다.
  • 따라서 두 사각형 넓이의 차이가 참외밭이 됩니다.
  • 하지만 여기서 문제는 아래와 같은 경우입니다.

바로 arr[0] ~ arr[5]까지 위 조건은 발생하지 않습니다. arr[3], arr[4], arr[5], arr[0] 으로 연속될 경우만 위 조건이 발생됩니다.

따라서 해당조건이 발생될 수 있도록 반복문 내 배열의 인덱스에 % 6을 취해줍니다.

728x90
반응형
Comments