https://www.acmicpc.net/problem/1107
백준 1107번 리모컨문제를 풀어봤습니다.
직관적으로 풀려다가 6중 for문을 사용하게 됐습니다.
버튼 0이 고장났을 때 자릿수에 맞춰서 if문을 적용시켜줘야 합니다. 반복문에서 222는 000222므로 앞에 있는 세자리의 0은 무시하고 계산했습니다.
아래는 전체 코드입니다.
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <math.h>
using namespace std;
bool button[10];
int main() {
int target;
int m;
int cnt = 0;
int exit = 0;
int distance = 0;
fill(button, button+10, 1);
cin >> target >> m;
for (int i = 0; i < m; i++) {
int temp;
cin >> temp;
button[temp] = 0;
}
int min_sub = 500000;
int abs_sub;
int temp;
int current = -1;
int loop = -1;
distance = abs(target - 100);
for (int a = 0; a < 10; a++) {
for (int b = 0; b < 10; b++) {
for (int c = 0; c < 10; c++) {
for (int d = 0; d < 10; d++) {
for (int e = 0; e < 10; e++) {
for (int f = 0; f < 10; f++) {
loop++;
if (button[0] == 0) {
if (loop < 10) {
if (button[f] == 0)
continue;
else {
temp = 0;
temp = a * 100000
+ b * 10000
+ c * 1000
+ d * 100
+ e * 10
+ f * 1;
abs_sub = abs(target - temp);
if (abs_sub < min_sub) {
min_sub = abs_sub;
current = temp;
}
}
}
else if (loop < 100) {
if (button[e] == 0 || button[f] == 0)
continue;
else {
temp = 0;
temp = a * 100000
+ b * 10000
+ c * 1000
+ d * 100
+ e * 10
+ f * 1;
abs_sub = abs(target - temp);
if (abs_sub < min_sub) {
min_sub = abs_sub;
current = temp;
}
}
}
else if (loop < 1000) {
if ( button[d] == 0 || button[e] == 0 || button[f] == 0)
continue;
else {
temp = 0;
temp = a * 100000
+ b * 10000
+ c * 1000
+ d * 100
+ e * 10
+ f * 1;
abs_sub = abs(target - temp);
if (abs_sub < min_sub) {
min_sub = abs_sub;
current = temp;
}
}
}
else if (loop < 10000) {
if ( button[c] == 0
|| button[d] == 0 || button[e] == 0 || button[f] == 0)
continue;
else {
temp = 0;
temp = a * 100000
+ b * 10000
+ c * 1000
+ d * 100
+ e * 10
+ f * 1;
abs_sub = abs(target - temp);
if (abs_sub < min_sub) {
min_sub = abs_sub;
current = temp;
}
}
}
else if (loop < 100000) {
if (button[b] == 0 || button[c] == 0
|| button[d] == 0 || button[e] == 0 || button[f] == 0)
continue;
else {
temp = 0;
temp = a * 100000
+ b * 10000
+ c * 1000
+ d * 100
+ e * 10
+ f * 1;
abs_sub = abs(target - temp);
if (abs_sub < min_sub) {
min_sub = abs_sub;
current = temp;
}
}
}
else if (loop < 1000000) {
if (button[a] == 0 || button[b] == 0 || button[c] == 0
|| button[d] == 0 || button[e] == 0 || button[f] == 0)
continue;
else {
temp = 0;
temp = a * 100000
+ b * 10000
+ c * 1000
+ d * 100
+ e * 10
+ f * 1;
abs_sub = abs(target - temp);
if (abs_sub < min_sub) {
min_sub = abs_sub;
current = temp;
}
}
}
}
else if ( button[a] == 0 || button[b] == 0 || button[c] == 0
|| button[d] == 0 || button[e] == 0 ||button[f] == 0)
continue;
else {
temp = 0;
temp = a * 100000
+ b * 10000
+ c * 1000
+ d * 100
+ e * 10
+ f * 1;
abs_sub = abs(target - temp);
if (abs_sub < min_sub) {
min_sub = abs_sub;
current = temp;
}
}
}
}
}
}
}
}
if (current == -1) {
min_sub = abs(target - 100);
}
else {
string current_str = to_string(current);
cnt = current_str.size();
min_sub += cnt;
}
if (distance < min_sub)
cnt = distance;
else
cnt = min_sub;
cout << cnt;
return 0;
}
'알고리즘 > PS' 카테고리의 다른 글
[C++] 백준 9663 : N-Queen (0) | 2022.03.29 |
---|---|
[C++] 백준 1753 : 최단 경로 (0) | 2022.03.28 |
[C++] 백준 7562 : 나이트의 이동 (0) | 2022.03.26 |
[C++] 백준 1707 : 이분 그래프 (0) | 2022.03.26 |
[C++] 백준 2206 : 벽 부수고 이동하기 (0) | 2022.03.25 |