(백준 알고리즘 문제풀이) 1107번 리모컨
by 줌코딩
문제
어떻게 접근할 것인가
- 고민고민하다가 결국에 사람처럼 되는 수를 하나씩 늘리면서 확인하는 bruteforce를 생각해냈다.
주의할 점
- 100에서 부터의 거리가 최종 구한 값보다 크다면 100에서의 거리를 출력해라
- 만약 정답이 10까지의 거리를 구한다고 할때 11보다 9에서 쓰는게 개수를 하나 덜 쓴다. 즉 빼기 값을 먼저 확인해야한다.
- 10개 모두 고장난 경우 그냥 100부터의 거리를 출력해라!
코드
#include <cstdio>
#include <string>
using namespace std;
int d[2] = {-1, 1}, num[10], temp, n, m, cnt, from100;
string s;
int main(){
scanf("%d %d", &n, &m);
from100 = n > 100 ? n - 100 : 100 - n;
for(int i = 0; i < m; i++){
scanf("%d", &temp);
num[temp] = 1;
}
if(m == 10){
printf("%d", from100);
return 0;
}
while(1){
for(int i = 0; i < 2; i++){
if(n+cnt*d[i] < 0) continue;
s = to_string(n+cnt*d[i]);
for(int i = 0; i < s.size(); i++){
if(num[s[i]-'0']) {
s[0] = '-';
break;
}
}
if(s[0]!= '-'){
if(cnt + s.size() < from100)printf("%lu", cnt + s.size());
else printf("%d", from100);
return 0;
}
}
cnt++;
}
}
느낀점
- 만약 실제 문제에서 이런걸 발견하면 더 나은 방법을 계속해서 고민할 것 같다.
- 효율적인 방법을 생각하다가 막히면 최대한 단순한 방법을 빨리 생각해내야겠다.
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
Subscribe via RSS