#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
queue<int> answer;
const int button[10][5] = {
{0, 1, 2, -1, -1},
{3, 7, 9, 11, -1},
{4, 10, 14, 15, -1},
{0, 4, 5, 6, 7},
{6, 7, 8, 10, 12},
{0, 2, 14, 15, -1},
{3, 14, 15, -1, -1},
{4, 5, 7, 14, 15},
{1, 2, 3, 4, 5},
{3, 4, 5, 9, 13}
};
int myClock[16] = {0, };
int level;
int maxLevel;
// ๋ฒํผ์ ๋๋ฅด๊ณ clock์ ์์๋ฅผ ๋ณ๊ฒฝํ๋ ๋๊ตฌ
void pressButton(int n, int a) {
// n์ ๋ฒํผ ๋ฒํธ, a๋ +3 ๋๋ -3์ผ๋ก, ๋ฐฐ์ด์ ๋ํ ์ซ์
if (a == 0) return;
for (int i = 0; i < 5; i++) {
if (button[n][i] == -1)
break;
else {
myClock[button[n][i]] += a;
// ์๊ณ๊ฐ ๋ฒ์ ์ธ์ ์ซ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค๋ฉด ์ฃผ๊ธฐ(12)๋ฅผ ๋ํ๊ฑฐ๋ ๋นผ์ ์์
if (myClock[button[n][i]] % 12 < 3) {
myClock[button[n][i]] %= 12;
myClock[button[n][i]] = 12 + myClock[button[n][i]];
}
else
myClock[button[n][i]] %= 12;
}
}
}
// ์ค์ ๋์์ ํ๋ ์ฌ๊ทํจ์
void run(int n) {
/* clock์ ๋ชจ๋ ์์๊ฐ 12๊ฐ ๋๋ฉด level์ maxLevel๊ณผ ๋น๊ต ํ ๋ฐํ
* ๋ฒํผ ๋ฒํธ๊ฐ 9๊ฐ ๋์ด๊ฐ๋ ๋ฐํ
*/
bool flag = false;
for (int i = 0; i < 16; i++)
if (myClock[i] != 12)
flag = true;
if (!flag) {
if (level < maxLevel)
maxLevel = level;
return;
}
if (n > 9) return;
/* ๊ฐ ๋ฒํผ๋น 0๋ฒ~3๋ฒ์ฉ ๋๋ฌ๋ณด๊ณ , ๋๋ฅธ๋งํผ level์ ๋ํด์ค๋ค.
* ๋ค์ ๋ฒํผ์ run ํด์ค๋ค.
* ์คํจํ๋ค๋ฉด run()์ดํ ์ฝ๋๋ก ์์๋ณต๊ตฌ๋๋ฉฐ, ๋ค์ ํ์ฐจ ์๋
*/
for (int i = 0; i < 4; i++) {
pressButton(n, 3*i);
level += i;
run(n + 1);
pressButton(n, -3*i);
level -= i;
}
return;
}
int main() {
int tc;
cin >> tc;
while (tc > 0) {
for (int i = 0; i < 16; i++)
cin >> myClock[i];
level = 0;
maxLevel = 100;
run(0);
// ์๋ฌด๋ฐ ๊ฐ๋ ์ฐพ์ง ๋ชปํ๋ค๋ฉด -1 ๋ฐํ
if (maxLevel == 100)
maxLevel = -1;
answer.push(maxLevel);
tc--;
}
while (!answer.empty()) {
cout << answer.front() << endl;
answer.pop();
}
return 0;
}
'๋ฒํผ์ ๋๋ฅด๋ ์์๋ ์ ํ ์๊ด์๋ค'
๋ฌธ์ ๋ฅผ ์ ํ๊ณ ๋ฌด์์ ์ฝ๋๋ฅผ ์์ฑํ๋ค ๋ณด๋ ๊ฒฐ๊ตญ ์๊ฐ์ ๋ง์ ์ ๊ฒฐ๊ณผ ๊ฐ์ด๋ฏ๋ก ์์๊ฐ ์๋ฏธ๊ฐ ์๋ค๋ ์ฌ์ค์ ๊นจ๋ฌ์๋ค. ๋ฐ๋ผ์ ๋ฒํผ์ 0ํ, 1ํ, 2ํ, 3ํ ๋๋ฌ๋ณด๋ฉฐ ๊ฐ๊ฐ์ ๊ฒฝ์ฐ ๋ค์๋ฒํผ์ ์ฌ๊ท ํธ์ถํ์ฌ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ํ๋ค.
โ์ถ๊ฐ์ ์ผ๋ก button[]๊ณผ ๊ฐ์ด ๋ฌธ์ ์์ ์ฃผ์ด์ง ๋ณํ์ง ์๋ ์กฐ๊ฑด์ const๋ก ์ฐ๋ ๊ฒ์ด ์ข๋ค. ๋ <ctime.h>์ clockํจ์๊ฐ ์ด๋ฏธ ์์ผ๋ฏ๋ก, ๋ค๋ฅธ ๋ณ์๋ช (myClock)์ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์ฑ์ ์ ์ปดํ์ผ ์คํจ๊ฐ ๋์ค๋ ์ฐธ๊ณ .
'๐ > ์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ์นด๋ผ์ถ๋ฐ์ ๋น ๋ฅธ ๊ณฑ์ (Karatsuba) (1) | 2020.07.28 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ๋ถํ ์ ๋ณต(Divide & Conquer) (0) | 2020.07.28 |
[์๊ณ ๋ฆฌ์ฆ] ์์ ํ์(BOARDCOVER) (0) | 2020.07.28 |
[์๊ณ ๋ฆฌ์ฆ] ์์ ํ์(PICNIC) (0) | 2020.07.28 |
[์๊ณ ๋ฆฌ์ฆ] ๋ฌด์ํ๊ฒ ํ๊ธฐ(Brute-Force) (0) | 2020.07.28 |