우선 재귀적으로 완전탐색을 구현하여 각각의 10개의 스위치에 대해 0번~3번을 누르게 해서
총 410 가지를 검사하여 결과적으로 모든 시계가 12시가 된 경우는 총 몇번의 스위치를 눌렀는지(pressed 변수) 를 반환하여 가장작은 횟수를 min 변수에 넣었고 만약 모든 경우에 불가능하다면 기본값인 987654321 을 반환 하게 했습니다.
문제에서 주어진 테스트케이스는 모두 올바른 결과가나왔고
추가적으로 몇가지 케이스에 대해 테스트를 해봤는데 올바른 결과가 나왔습니다(저의 생각으론 올바른 결과인데 맞는지 봐주시면감사하겠습니다.)
1. 한 스위치만 한번 누르면 되는 경우
(9 9 9 12 12 12 12 12 12 12 12 12 12 12 12 12)
2. 한 스위치를 세번 누르면 되는경우
(3 3 3 12 12 12 12 12 12 12 12 12 12 12 12 12)
3. 모든 스위치를 한번씩 누르면 되는경우
(3 6 3 12 9 12 6 12 9 6 6 9 9 9 12 12)
4. 모든 스위치를 세번씩 누르면 되는경우
(9 6 9 12 3 12 6 12 3 6 6 3 3 3 12 12)
5. 0번 시계만 9시 나머지시계는 12시인 경우(불가능한 경우(아마))
(9 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12)
#include<iostream>
#define FOR(i,n) for(int i=0; i <n; i++)
using namespace std;
int mySwitch[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 press_switch(int clock[17], int pressed, int cur) {
if (cur == 10) {
FOR(i, 16){
if (clock[i] % 4 != 0) return 987654321;
}
return pressed;
}
int min = 987654321;
FOR(i, 4) {
for (int j = 0; mySwitch[cur][j] != -1 && j < 5; j++) {
clock[mySwitch[cur][j]] += (1 * i);
}
int cnt = press_switch(clock, pressed + i, cur + 1);
if (min > cnt) min = cnt;
for (int j = 0; mySwitch[cur][j] != -1 && j < 5; j++) {
clock[mySwitch[cur][j]] -= (1 * i);
}
}
return min;
}
int main() {
int C;
cin >> C;
while (C--) {
int clock[17] = { 0, };
FOR(i, 16) {
int tmp;
cin >> tmp;
tmp %= 12;
tmp /= 3;
clock[i] = tmp;
}
int ans = press_switch(clock, 0, 0);
if (ans == 987654321) cout << -1 << endl;
else cout << ans << endl;
}
return 0;
}
sgc109
[[problem:CLOCKSYNC]]
우선 재귀적으로 완전탐색을 구현하여 각각의 10개의 스위치에 대해 0번~3번을 누르게 해서
총 410 가지를 검사하여 결과적으로 모든 시계가 12시가 된 경우는 총 몇번의 스위치를 눌렀는지(pressed 변수) 를 반환하여 가장작은 횟수를 min 변수에 넣었고 만약 모든 경우에 불가능하다면 기본값인 987654321 을 반환 하게 했습니다.
문제에서 주어진 테스트케이스는 모두 올바른 결과가나왔고
추가적으로 몇가지 케이스에 대해 테스트를 해봤는데 올바른 결과가 나왔습니다(저의 생각으론 올바른 결과인데 맞는지 봐주시면감사하겠습니다.)
1. 한 스위치만 한번 누르면 되는 경우
(9 9 9 12 12 12 12 12 12 12 12 12 12 12 12 12)
2. 한 스위치를 세번 누르면 되는경우
(3 3 3 12 12 12 12 12 12 12 12 12 12 12 12 12)
3. 모든 스위치를 한번씩 누르면 되는경우
(3 6 3 12 9 12 6 12 9 6 6 9 9 9 12 12)
4. 모든 스위치를 세번씩 누르면 되는경우
(9 6 9 12 3 12 6 12 3 6 6 3 3 3 12 12)
5. 0번 시계만 9시 나머지시계는 12시인 경우(불가능한 경우(아마))
(9 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12)
11년 전