반응형
https://www.acmicpc.net/problem/1107
1107번: 리모컨
첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼
www.acmicpc.net
[ 문제풀이 ]
1. 원하는 채널의 자릿수를 digit 변수에 저장합니다.
2. 못 쓰는 숫자를 arr배열에 저장합니다.
3. dfs를 통해 만들 수 있는 숫자들을 모두 만듭니다.
4. N과 만든 수의 차를 ans와 비교하여 최솟값을 저장합니다.
5. 모든 숫자 버튼을 못 쓸 경우가 있기 때문에 level이 0일 때는 cur을 100으로 갱신해줍니다.
[ 소스코드 ]
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | #include<iostream> #include<cmath> using namespace std; int N, M; int arr[10]; int digit; int ans = 987654321; void dfs(int level, int cur) { ans = min(ans, abs(N - cur) + level); if (level == digit + 1) { return; } if (level == 0) { cur = 0; } for (int i = 0; i < 10; i++) { if (arr[i] != 1) { cur *= 10; cur += i; dfs(level + 1, cur); cur -= i; cur /= 10; } } } int main() { scanf("%d %d", &N, &M); for (int i = 0; i < M; i++) { int num; scanf("%d", &num); arr[num] = 1; } if (N == 100) { printf("%d", 0); return 0; } for (int i = 0; i < 10; i++) { if (N < pow(10, i)) { digit = i; break; } } dfs(0, 100); printf("%d", ans); } | cs |
반응형
'백준' 카테고리의 다른 글
[ 백준 ] 20056번 - 마법사 상어와 파이어볼 (C++) (0) | 2022.09.22 |
---|---|
[ 백준 ] 17837번 - 새로운 게임 2 (C++) (0) | 2022.09.21 |
[ 백준 ] 1012번 - 유기농 배추 (C++) (0) | 2022.09.19 |
[ 백준 ] 11723번 - 집합 (C++) (0) | 2022.09.18 |
[ 백준 ] 21610번 - 마법사 상어와 비바라기 (C++) (0) | 2022.09.17 |