
문제 링크 : 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개의 곱을 처리하는 로직을 작성해야 하는데, 이 부분을 어떻게 해결할까 하다가 그냥 나머지를 이용해 배열을 체크하는 방식으로 해결했다.
