우선 재귀적으로 완전탐색을 구현하여 각각의 10개의 스위치에 대해 0번~3번을 누르게 해서
총 4^10 가지를 검사하여 결과적으로 모든 시계가 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++)usingnamespacestd;intmySwitch[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}};intpress_switch(intclock[17],intpressed,intcur){if(cur==10){FOR(i,16){if(clock[i]%4!=0)return987654321;}returnpressed;}intmin=987654321;FOR(i,4){for(intj=0;mySwitch[cur][j]!=-1&&j<5;j++){clock[mySwitch[cur][j]]+=(1*i);}intcnt=press_switch(clock,pressed+i,cur+1);if(min>cnt)min=cnt;for(intj=0;mySwitch[cur][j]!=-1&&j<5;j++){clock[mySwitch[cur][j]]-=(1*i);}}returnmin;}intmain(){intC;cin>>C;while(C--){intclock[17]={0,};FOR(i,16){inttmp;cin>>tmp;tmp%=12;tmp/=3;clock[i]=tmp;}intans=press_switch(clock,0,0);if(ans==987654321)cout<<-1<<endl;elsecout<<ans<<endl;}return0;}
sgc109
CLOCKSYNC
우선 재귀적으로 완전탐색을 구현하여 각각의 10개의 스위치에 대해 0번~3번을 누르게 해서
총 4^10 가지를 검사하여 결과적으로 모든 시계가 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)
9년 전