Algorithm_BOJ(백준)/완전탐색(Brute Force)
[백준 1107 c++] 리모컨
xhaktmchl
2021. 1. 29. 21:12
728x90
반응형
문제 링크
1107번: 리모컨
첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼
www.acmicpc.net
문제 접근
// 접근: 채널보다 큰수중에 최소차이,채널보다 작은 수 중에 최소차이, 100에서 ++버튼으로 최소차이
// 중 최소값 찾으려 했으나 저건이 넘 많아지
문제 풀이
// 풀이: 그래서 0부터 1000000까지 탐색하며 최소차이이며 고장난 버튼 없는지 검사함
주의
// 주의: 채널과 최소차이는 채널버튼 누르는것 까지 더해야 한다
개념
// 개념: abs() : 절댓값
소스코드
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio> // c 문법 헤더파일
#include<string> // c++ 문자열 클래스
#include<vector> // 동적배열 라이브러리
#include<stack>
#include<queue>
#include<algorithm> // sort와 unique 사용
#include<cmath> // 제곱이나 루트함수 사용
#include<cstring> // memset 함수
#include <set>
// [백준 1107 c++] 리모컨
// 접근: 채널보다 큰수중에 최소차이,채널보다 작은 수 중에 최소차이, 100에서 ++버튼으로 최소차이
// 중 최소값 찾으려 했으나 저건이 넘 많아지
// 풀이: 그래서 0부터 1000000까지 탐색하며 최소차이이며 고장난 버튼 없는지 검사함
// 주의: 채널과 최소차이는 채널버튼 누르는것 까지 더해야 한다
// 개념: abs() : 절댓값
#define MAX 1000001
using namespace std; // cin,cout 편하게 사용 라이브러리
int n;
int m;
int map[20] = { 0, };
int from100;
int numbutton;
int main()
{
// IO 속도 향상
//ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n>>m ;
vector<int> v;
for (int i = 0; i < m; i++)
{
int tp;
cin >> tp;
map[tp] = 1;
}
// n이 100일 경우 제외
if (n == 100)
{
cout << 0 << '\n';
return 0;
}
// 100에서 ++이나 -- 만 하는 경우
from100 = abs(100 - n); // abs(): 절댓값 구하는 메소드
int minnum = from100;
// 채널입력해서 ++,-- 하는 경우
for (int i = 0; i < MAX; i++)
{
int c = 0;
numbutton = abs(n - i);
string s = to_string(i);
// 최소값보다 작으면
if (minnum > numbutton)
{
// 고장난 버튼 포함하는지 검사
for (int j = 0; j < s.length(); j++)
{
if (map[s[j]-'0'] != 0)
{
c++;
}
}
}
// 고장난 버튼 포함 안돼 있으면
if (c == 0)
{
int tp = numbutton + s.length();
minnum = min(minnum, tp);
}
}
cout << minnum << '\n';
return 0;
}
반응형