알고리즘/백준[baekjoon]
[baekjoon] 백준 1107번 : 리모컨 (by python 파이썬)
코딩하는이씨
2022. 4. 13. 22:59
728x90
반응형
https://www.acmicpc.net/problem/1107
1107번: 리모컨
첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼
www.acmicpc.net
정답 code
target = int(input())
ans = abs(100-target) # + or -로만 이동할때 (최대값)
m = int(input())
if m: #고장난게 있을경우에만 input 실행
b = set(input().split())
else:
b = set()
for num in range(1000001):
for n in str(num):
if n in b: #눌러서 만들수 없는 숫자 포함이면 종료
break
else:
#기존값과 버튼을 누르고 + - 버튼으로 간 횟수중 최솟값
ans = min(ans, len(str(num))+abs(num - target))
print(ans)
이 문제를 처음 보고 들은 생각은 어떻게 하면 빠르게 풀 수 있을까였다.
시도 한방법은 몇가지 있었다.
1. 고장난 버튼 제외하고 남아있는버튼으로 target 채널근처에 먼저 맞추기
2. 고장나지 않은 버튼으로 만들수있는 채널을 target채널부터 작아지는 채널과 커지는 채널중에 가장가까운 채널 찾기
.
.
.
하지만 간단히 완전탐색으로 풀 수 있는 문제였다.
solution
1.타겟 채널입력
2.정답을 넣을 변수ans 에 + - 버튼으로만 이동하는 횟수 입력
3.m 입력후 값이 있다면 input통해 고장난 값 입력
4.완전탐색으로 채널 하나하나 마다 탐색하여 고장난 버튼으로 이루어진 채널이 아니라면,
원래의 경우의수와 숫자버튼을 누르고 남은 차이만큼을 비교하여 최솟값을 ans에 저장
5.ans 출력
728x90
반응형