일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- C
- C언어
- Java
- 플러터 개발환경 설정
- 스프링
- 자바 스프링
- php 프로그래밍 입문 솔루션
- 페이코 초대코드
- 한정 분기
- spring
- 최단 경로
- Flutter
- php 프로그래밍 입문 예제
- php 프로그래밍 입문
- php 프로그래밍 입문 3판
- 페이코 친구코드
- programmers
- 페이코 추천인코드
- 페이코 추천인
- 백준
- php 프로그래밍
- php 프로그래밍 입문 연습문제
- php 프로그래밍 입문 문제풀이
- 자바
- 파이썬
- JAVA SPRING
- 배열
- 플러터
- php
- SWEA
- Today
- Total
ImJay
[파이썬/Python] 백준 1107번 리모컨 본문
[파이썬/Python] 백준 1107번 리모컨
1107번: 리모컨
첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼
www.acmicpc.net
문제
수빈이는 TV를 보고 있다. 수빈이는 채널을 돌리려고 했지만, 버튼을 너무 세게 누르는 바람에, 일부 숫자 버튼이 고장났다.
리모컨에는 버튼이 0부터 9까지 숫자, +와 -가 있다. +를 누르면 현재 보고있는 채널에서 +1된 채널로 이동하고, -를 누르면 -1된 채널로 이동한다. 채널 0에서 -를 누른 경우에는 채널이 변하지 않고, 채널은 무한대 만큼 있다.
수빈이가 지금 이동하려고 하는 채널은 N이다. 어떤 버튼이 고장났는지 주어졌을 때, 채널 N으로 이동하기 위해서 버튼을 최소 몇 번 눌러야하는지 구하는 프로그램을 작성하시오.
수빈이가 지금 보고 있는 채널은 100번이다.
입력
첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼이 주어지며, 같은 버튼이 여러 번 주어지는 경우는 없다.
출력
첫째 줄에 채널 N으로 이동하기 위해 버튼을 최소 몇 번 눌러야 하는지를 출력한다.
예제 입력
5457
3
6 7 8
예제 출력
6
풀이
브루트포스
import sys
input = sys.stdin.readline
n = int(input())
m = int(input())
broken = list(map(int, input().split()))
min_count = abs(100 - n) # 초기 최소 버튼 눌린 횟수 (100에서 N으로 바로 이동하는 경우)
for nums in range(1000001): # 0부터 1000000까지의 숫자를 대상으로 순회
num = str(nums)
for i in range(len(num)): # 숫자 num의 각 자리수를 확인
if int(num[i]) in broken: # 고장난 버튼이라면 중단
break
else: # for 루프가 완전히 돌았을 때 (고장난 버튼이 없는 경우)
min_count = min(min_count, abs(int(num) - n) + len(num)) # 최소 횟수 갱신
print(min_count)
채널 N으로 이동하기 위해 시도하는 번호는 0부터 1000000까지이므로 O(1000000)의 시간 복잡도가 소요된다.
각 번호마다 숫자의 각 자리를 확인하여 고장난 버튼인지 판별하는 루프가 있다. 이 루프의 시간 복잡도는 숫자의 자릿수인 O(log N)이다.
따라서 전체 코드의 시간 복잡도는 O(1000000 * log N)이 된다.
'Solved.ac - Python > CLASS 3' 카테고리의 다른 글
[파이썬/Python] 백준 9375번 패션왕 신해빈 (1) | 2023.12.22 |
---|---|
[파이썬/Python] 백준 9019번 DSLR (0) | 2023.08.10 |
[파이썬/Python] 백준 7662번 이중 우선순위 큐 (0) | 2023.08.08 |
[파이썬/Python] 백준 7569번 토마토 (0) | 2023.08.07 |
[파이썬/Python] 백준 1074번 Z (0) | 2023.06.10 |