티스토리 뷰
반응형
문제:www.acmicpc.net/problem/1107
이 문제를 처음에 봤을 때 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
우선 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
링크
TAG
- 카카오
- env
- ubuntu
- setattr
- 프로그래머스
- Spring
- dockerignore
- Celery
- DRF
- thread
- 그래프
- docker-compose
- docker
- 면접
- 백준
- Collections
- Linux
- django
- headers
- 2021 KAKAO BLIND RECRUITMENT
- 알고리즘
- Pattern
- 자바
- Java
- Python
- postgres
- PostgreSQL
- Command Line
- 파이썬
- BFS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
글 보관함