백준 / 2477 / 참외밭 / C++

비니01·2025년 1월 6일

백준

목록 보기
42/49

문제 링크 : https://www.acmicpc.net/problem/2477

#include <bits/stdc++.h>

using namespace std;

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	//freopen("test.txt", "rt", stdin);
	int n, subval, standval = 1;
	cin >> n;
	vector<int> dir(6);
	vector<int> dist(6);
	vector<bool> used(5, false);
	for(int i = 0; i < 6; i++)
	{
		cin >> dir[i] >> dist[i];
	}
	for(int i = 0; i < 6; i++)
	{
		if(dir[i % 6] == dir[(i + 2) % 6] && dir[(i + 1) % 6] == dir[(i + 3) % 6])
		{
			subval = dist[(i + 1) % 6] * dist[(i + 2) % 6];
			used[dir[i % 6]] = true;
			used[dir[(i + 1) % 6]] = true;
			break;
		}
	}
	for(int i = 0; i < 6; i++)
	{
		if(!used[dir[i]])
		{
			standval *= dist[i];
		}
	}
	cout << (standval - subval) * n;
	return 0;
}

가벼운 마음으로 풀려고 했다가 움찔했다. 난이도가 어려운 편은 아니지만 생각했던 것처럼 구현이 수월하지는 않았던 것 같다.

문제의 로직상 6번 주어지는 방향번호(1,2,3,4) 중 중복되는 숫자 중 일렬로 세웠을 때 안쪽에 있는 숫자 2개의 곱을 처리하는 로직을 작성해야 하는데, 이 부분을 어떻게 해결할까 하다가 그냥 나머지를 이용해 배열을 체크하는 방식으로 해결했다.

profile
이것저것

0개의 댓글