티스토리 뷰
https://www.acmicpc.net/problem/1107
현재 채널이 100이고 리모컨의 버튼을 눌러서 채널 N으로 이동하려고 한다. 리모컨에 고장난 버튼이 있을 수 있다. 이 때 버튼을 최소 몇 번 눌러야 하는지 구하는 문제이다. 최소로 버튼을 누르려면 N과 최대한 가까운 채널을 숫자만 눌러서 이동한 후 나머지 차를 +나 -버튼을 이용해서 이동하면 된다. 먼저 ans을 N과 100의 절대값 차(+나 -로만 이동하는 경우)로 둔다. 그리고 N보다 큰 채널로 이동하는 경우, 작은 채널로 이동하는 경우 각각에 대하여 ans보다 작으면 갱신해주면 된다.
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 | #include <cstdio> int min(int a,int b) { return a<b?a:b; } int abs(int n) { return n>0?n:-n; } int main() { int n,m,t,cnt; scanf("%d %d",&n,&m); int ans=abs(n-100); bool b[10],flag; for(int i=0;i<10;i++) b[i]=true; while(m--) scanf("%d",&t),b[t]=false; for(int i=n;i<=1000000;i++) { flag=true,cnt=0,t=i; while(true) { if(!b[t%10]) { flag=false; break; } t/=10,cnt++; if(t==0) break; } if(flag) { ans=min(ans,cnt+i-n); break; } } for(int i=n;i>=0;i--) { flag=true,cnt=0,t=i; while(true) { if(!b[t%10]) { flag=false; break; } t/=10,cnt++; if(t==0) break; } if(flag) { ans=min(ans,cnt+n-i); break; } } printf("%d\n",ans); return 0; } | cs |
'Algorithm > BOJ' 카테고리의 다른 글
12026 BOJ 거리 (0) | 2018.03.30 |
---|---|
5525 IOIOI (0) | 2018.03.14 |
2138 전구와 스위치 (0) | 2018.03.14 |
2573 빙산 (0) | 2018.03.14 |
9019 DSLR (0) | 2018.03.14 |