티스토리 뷰
#include <stdio.h>
#include <math.h>
int remote[10];
int min(int a, int b)
{
return a < b ? a : b;
}
int possible(int a) {
int i, j, ab, digit;
int result = 0;
ab = a;
while (1) {
digit = ab % 10;
if (remote[digit] == -1) {
result = 0;
break;
}
if (ab < 10) {
result += 1;
break;
}
ab /= 10;
result++;
}
return result;
}
int main(void)
{
int i, n, m, x, digit, MAX;
int MIN = 987654321;
scanf("%d", &n);
scanf("%d", &m);
for (i = 0; i < m; i++) {
scanf("%d", &x);
remote[x] = -1;
}
if (n < 100)
MAX = 100;
else
MAX = n;
for (i = 0; i <= MAX * 2; i++) {
digit = possible(i);
if (digit != 0 && digit < abs(i - 100))
MIN = min(MIN, digit + abs(n - i));
else
MIN = min(MIN, abs(i - 100) + abs(n - i));
}
printf("%d", MIN);
return 0;
}
디버깅할 때 좀 재밌었다.
처음엔 n보다 큰 수에서 n으로 내려올 생각을 못했고 입력 예에 대해 생각하다 우연히 떠올랐다.
문제를 많이 풀어봐야 한다는 말이 이해가 됐다. 이번엔 운이 좋아서 금방 생각났지만 늘 그런건 아니다. 이런 풀이 방식을 많이 알아두는 게 제한 시간 안에 맞추기엔 도움이 되겠지.
기억하려고 적어둔다.
'프로그래밍 > 문제풀이' 카테고리의 다른 글
[BOJ] 10799 쇠막대기 (0) | 2020.06.13 |
---|---|
[BOJ] 14891 톱니바퀴 (0) | 2020.05.20 |
[BOJ] 10971 외판원 순회2 (0) | 2020.05.15 |
[BOJ] 11051 이항 계수 2 (0) | 2020.02.28 |
[BOJ] 11057 오르막 수 (0) | 2020.02.27 |
댓글