티스토리 뷰
문제:www.acmicpc.net/problem/1107
1107번: 리모컨
첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼
www.acmicpc.net
이 문제를 처음에 봤을 때 lower_bound 와 upper_bound의 관계를 이용하면 되지 않을까 하고 이에 대하여 코딩을 짰었는데 100과 가까운 숫자에 대하여 어떻게 처리해야 할지 감이 안왔다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import sys
def solve(sub):
global ans
for p in possible:
now = sub + str(p)
ans = min( ans, len(str(int(now))) + abs(n-int(now)) )
if len(now) < 6:
solve(now)
n = int(input())
m = int(input())
ans = abs(n-100)
possible = set()
if m:
broken = set(map(int, sys.stdin.readline().split()))
possible = set(i for i in range(10)).difference(broken)
else:
ans = min(ans, len(str(n)))
solve('')
print(ans)
|
cs |
참고:https://suri78.tistory.com/150
[백준알고리즘] 1107번: 리모컨 -Python
[백준알고리즘] 1107번: 리모컨 -Python https://www.acmicpc.net/problem/1107 1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개..
suri78.tistory.com
우선 if문은 사용 가능한 버튼을 저장하는 possible을 설정하였고 else문을 통해 고장나지 않았을 때에는 찾고자 하는 숫자에서 100을 뺀 값과 순전히 버튼을 눌렀을 때의 크기를 비교한다. 그리고 solve 함수를 통해 결과를 낸다.
solve함수를 해석하자면 우선 버튼을 누를 수 있는 숫자에 대하여 최대길이까지 브루트 포스 알고리즘을 적용한다.
ans = min( ans, len(str(int(now))) + abs(n-int(now)) )은 숫자길이 + ( + 또는 - 의 누르는 갯수)를 의미한다.
1
2
3
|
5457
3
6 7 8
|
cs |
첫 번째 예시로 설명 해보면 리모컨이 가능한 숫자는 [0,1,2,3,4,5,9]이다. 여기서 solve는 0 ->000000까지 간다음 000001 -> 999999 까지 이렇게 완전탐색을 한다. 그러면서 ans의 최솟값을 갱신하면서 값을 찾아내는 형식이다.
'알고리즘 > 백준' 카테고리의 다른 글
15664번 N과M(10) 백준 (0) | 2020.12.06 |
---|---|
15663번 N과M(9) 백준 (0) | 2020.12.06 |
RGB거리2 17404번 백준 (0) | 2020.12.04 |
카잉 달력 6064번 백준 (0) | 2020.12.04 |
1,2,3 더하기3 15988번 백준 (0) | 2020.12.03 |
- Total
- Today
- Yesterday
- headers
- PostgreSQL
- Python
- docker-compose
- 2021 KAKAO BLIND RECRUITMENT
- 백준
- 카카오
- 자바
- django
- DRF
- BFS
- ubuntu
- Java
- 알고리즘
- docker
- postgres
- env
- Collections
- 그래프
- Command Line
- Spring
- thread
- 면접
- dockerignore
- 프로그래머스
- 파이썬
- setattr
- Linux
- Celery
- Pattern
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |