티스토리 뷰

알고리즘/백준

1107번 리모컨 백준

글을 쓰는 개발자 2020. 12. 5. 19:04
반응형

문제: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)
    
= int(input())
= 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
링크
«   2024/11   »
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
글 보관함