일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- JavaScript
- spring webflux
- C
- 자료구조
- Proxy
- Spring
- Data Structure
- Galera Cluster
- OS
- design pattern
- Algorithm
- react
- IT
- 파이썬
- 컴퓨터구조
- mongoDB
- Java
- 자바
- c언어
- 알고리즘
- 네트워크
- redis
- 백준
- 디자인 패턴
- MySQL
- Heap
- 운영체제
- Kafka
- MSA
- JPA
Archives
- Today
- Total
시냅스
백준 boj 1107 - 리모컨 (파이썬, python) 본문
https://www.acmicpc.net/problem/1107
현재 채널을 기준으로 고장난 버튼을 제외한 버튼을 눌러 최소한으로 목표 채널까지 도달하는 문제였다.
5457의 경우 5455 혹은 5459 에서 2번을 ++하거나 --하여 이동하는 것으로 5455(4) + ++ (2)로 총 6이다.
현재 채널의 경우, 100으로 만약 100이 목표채널로 설정되면 그냥 0을 출력,
또 고장난 버튼이 없다면 목표채널의 길이값을 출력해주면 된다.
브루트포스를 활용해 전체 가능성을 전부 체크하였다.
문제는 어렵지 않았고, 시간도 넉넉했으나 개인적으로는 while문 조건을 주는 것에서 시간이 좀 걸렸다.
부족한 코드라 고치고 싶은 부분도 있지만, 기록을 위해 남겨둬야겠다!
code
n = int(input()) # 이동해야 하는 채널
m = int(input()) # 고장난 버튼 갯수
if m: # m이 있으면 input값 받음
broken = list(input().split())
else:
broken = list()
result = abs(100 - n) # 현재 거리 - 이동해야 할 거리, 결과값으로 쓸 것
check = 0
while check <= 1000001:
cnt = 0
for b in broken: # check로 for문 돌려서 broken에 포함되어있으면 break 바로 줘도 될듯...
if b not in str(check):
cnt += 1
if cnt == len(broken): # broken에 없다는 게 판별 됐으면
result = min(result, len(str(check)) + abs(n - check)) # result 값 갱신
check += 1
print(result)
'알고리즘' 카테고리의 다른 글
백준 boj 1748 - 수 이어 쓰기 1 (파이썬, python) (0) | 2022.02.11 |
---|---|
백준 boj 9095 - 1, 2, 3 더하기 (파이썬, python) (0) | 2022.02.10 |
백준 boj 1476 - 날짜 계산 (파이썬, python) (0) | 2022.02.10 |
백준 boj 3085 - 사탕 게임 (파이썬, python) (0) | 2022.02.09 |
백준 boj 2309 - 일곱 난쟁이 (파이썬, python) (0) | 2022.02.09 |
Comments