백준1107(파이썬) - 리모컨
resilient
·2021. 6. 11. 12:21
728x90
반응형
https://www.acmicpc.net/problem/1107
- 먼저 이문제를 보고 첫 번째로 든 생각은 주어지는 n을 한자리씩 쪼개서 구현하는데에 사용해야 한다라는 것이였다. 처음에는 10으로 계속 나누어서 정수로 비교했지만 str(n)을 사용해서 문자열로 한자리씩 쉽게 사용할 수 있었다.
- 그리고 든 생각은 탐색이긴한데 범위를 어디까지 해야할지 였다.
- 그래서 생각한건 시간초과가 일단 날지라도, 주어진 n의 범위를 모두 완전탐색하는 가장 단순한 방법을 생각했다.
- 500000까지 범위이지만, ++ 하는 경우와 --하는 경우를 더하면 총 1000000가지의 경우가 있었고 탐색을 하였다.
- 탐색을 하면서 min으로 result값을 갱신해주면 어쨌든 가장 작은 수가 나오지 않을까 라는 생각이였는데
- 시간초과가 발생하지않았고, 문제가 해결되었다 자세한건 아래 코드의 주석을 보면 된다.
`
import sys
input = sys.stdin.readline
n = int(input())
m = int(input())
broken = list(input().split())
# 리모컨으로 나올수있는 최솟값
result = 987654321
length = 0
# 완전탐색의 끝판왕. 숫자를 1000001까지 다 훑는다 -> 만들수있는숫자 -500000 ~ 500000 까지.
for number in range(1000001):
# str 처리해서 하나하나 문자 처리해서 깨진 버튼인지 확인
for j in str(number):
if j in broken:
# 깨진 버튼이면 for문 탈출.
break
# 안깨진 버튼들만 모였으면, 자릿수+현재비교중인숫자에서 n 값을 뺀 절댓값을 더해서 원래 값과 비교.
else:
result = min(result,len(str(number))+abs(number-n))
# 구해진 result 값하고, 최소가 될 수 있는 값하고 비교해준다.
# (예를 들면 99 같은 경우 버튼 다 못쓰면 1만 빼주면되는 경우)
result = min(result,abs(100-n))
print(result)
반응형
'자료구조 & 알고리즘 > 백준(Baekjoon)' 카테고리의 다른 글
백준3085(파이썬) - 사탕 게임 (0) | 2021.06.21 |
---|---|
백준11729(파이썬) - 하노이 탑 이동 순서 (0) | 2021.06.14 |
백준1541(파이썬) - 잃어버린 괄호 (0) | 2021.06.10 |
백준2504(파이썬) - 괄호의 값 (0) | 2021.06.09 |
백준2630(파이썬) - 색종이 만들기 (0) | 2021.06.08 |