티스토리 뷰
https://www.acmicpc.net/problem/2138
첫번째 위치의 스위치를 누르거나 안 누르는 두 가지 경우에 대하여 최종 원하는 상태의 전구와 비교하여 그리디하게 끝까지 상태를 확정해나간다. 그리고 끝부분에서 스위치를 누르거나 안 누르는 두 가지 경우에 대하여 최종 상태를 만들 수 있는지 살펴보면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #include <iostream> #include <string> #include <algorithm> #define INF 100001 using namespace std; int n,ans=INF; string s1,s2,e; void go(string& s,int now,int cnt) { if(now==n-1) { if(s[now-1]==e[now-1] && s[now]==e[now]) ans=min(ans,cnt); for(int i=now-1;i<=now;i++) if(s[i]=='0') s[i]='1'; else s[i]='0'; if(s[now-1]==e[now-1] && s[now]==e[now]) ans=min(ans,cnt+1); return; } // 현재 스위치를 안 누른 경우 if(s[now-1]==e[now-1]) go(s,now+1,cnt); // 현재 스위치를 누른 경우 for(int i=now-1;i<=now+1;i++) if(s[i]=='0') s[i]='1'; else s[i]='0'; if(s[now-1]==e[now-1]) go(s,now+1,cnt+1); } int main() { cin>>n>>s1>>e; s2=s1; for(int i=0;i<=1;i++) if(s2[i]=='0') s2[i]='1'; else s2[i]='0'; // 0번째 스위치 안 눌렀을 경우, 눌렀을 경우 go(s1,1,0),go(s2,1,1); printf("%d",ans==INF?-1:ans); return 0; } | cs |
'Algorithm > BOJ' 카테고리의 다른 글
5525 IOIOI (0) | 2018.03.14 |
---|---|
1107 리모컨 (0) | 2018.03.14 |
2573 빙산 (0) | 2018.03.14 |
9019 DSLR (0) | 2018.03.14 |
1600 말이 되고픈 원숭이 (0) | 2018.03.14 |