기본 콘텐츠로 건너뛰기

[BOJ 1107] 리모컨

#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
int getNum(int n){
int cnt = 6;
bool is_first = true;
int divisor = 100000;
int num = n;
if (n == 0)
return 1;
while (1){
if (num/divisor != 0)
{
if (is_first == true){
is_first = false;
}
}
if (is_first == true)
cnt--;
num %= divisor;
divisor /= 10;
if (divisor == 0)
break;
}
return cnt;
}
bool check(vector<int> wrong_btn,int n){
int divisor = 100000;
int num = n;
bool is_first = false;
if (num == 0)
{
int temp = num/divisor;
for (int i = 0; i < wrong_btn.size(); i++){
if (temp == wrong_btn[i])
return false;
}
return true;
}
while (1){
if (is_first == true || num/divisor != 0)
{
is_first = true;
int temp = num/divisor;
for (int i = 0; i < wrong_btn.size(); i++){
if (temp == wrong_btn[i])
return false;
}
}
num %= divisor;
divisor /= 10;
if (divisor == 0)
break;
}
return true;
}
int main(void)
{
int N;
scanf("%d",&N);
int M;
scanf("%d",&M);
vector<int> wrong_btn;
for (int i = 0; i<M; i++){
int temp;
scanf("%d",&temp);
wrong_btn.push_back(temp);
}
int dist;
int min = 10000000;
int min_num;
bool is_all = false;
for (int j = 0; j<=12345678;j++){
if (check(wrong_btn, j) == false)
continue;
dist = abs(j-N);
if (dist < min)
{
min = dist;
min_num = j;
}
is_all = true;
}
int subt = abs(N-min_num);
int case1;
if (is_all == false)
case1 = 99999999;
else
case1 = getNum(min_num) + subt;
int case2 = abs(N-100);
if (case1 > case2)
printf("%d",case2);
else
printf("%d",case1);
}
view raw [BOJ 1107] hosted with ❤ by GitHub

댓글

이 블로그의 인기 게시물

Tree traversal의 3가지

1. 전위 순회 (Preorder Traversal) Root -> Left Tree -> Right Tree   ( 루트를 제일 처음에 방문 ) 2. 중위 순회 (Inorder Traversal) Left Tree -> Root -> Right Tree   ( 루트를 중간에 방문 ) 3. 후위 순회 (Postorder Traversal) Left Tree -> Right Tree -> Root   ( 루트를 제일 마지막에 방문 ) <소스코드> 출처 : http://www.geeksforgeeks.org/tree-traversals-inorder-preorder-and-postorder /// C program for different tree traversals #include <stdio.h> #include <stdlib.h> /* A binary tree node has data, pointer to left child    and a pointer to right child */ struct node {      int data;      struct node* left;      struct node* right; }; /* Helper function that allocates a new node with the    given data and NULL left and right pointers. */ struct node* newNode(int data) {      struct node* node = (struct node*)                 ...