문제에 대한 첫 인상
처음엔 도대체 어떻게 풀어야하지 고민하다가, 하룻밤 자고 나서야(ㅋㅋ) 해결책을 생각해냈다. 방향을 일일히 고려하는것은 어렵기 때문에 일반화해서 풀어내기로 했다.
가장 긴 두 변이 0, 1번째 인덱스가 되도록 하는 숫자를 찾는 것을 목표로 했다. “동쪽은 1, 서쪽은 2, 남쪽은 3, 북쪽은 4로 나타낸다.”라고 했기 때문에, ㄱ자
형태의 경우 423131
방향의 이동을 찾아내면 되고, 다른 형태의 경우도 314242
142323
231414
처럼 패턴을 구하면 된다. 그 인덱스를 기준으로 $ l(j)l(j+1) - l(j+3)l(j+4) $ 를 구하면 원하는 식을 얻어낼 수 있다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
int perSquare;
cin >> perSquare;
string direction = "";
vector<int> length;
for (int i=0; i<6; i++){
int dir, len;
cin >> dir >> len;
direction += to_string(dir);
length.push_back(len);
}
direction = direction + direction;
int j = 0;
for (j=0; j<7; j++){
string temp;
temp = direction.substr(j, 6);
if (temp=="423131" || temp=="314242" || temp=="142323" || temp=="231414"){
break;
}
}
int ans=0;
ans += length[(j)%6]*length[(j+1)%6] - length[(j+3)%6]*length[(j+4)%6];
ans *= perSquare;
cout << ans;
return 0;
}