본문 바로가기
Python

백준 1107

by Son 2023. 8. 14.

https://www.acmicpc.net/problem/1107

 

1107번: 리모컨

첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼이

www.acmicpc.net

import sys
input = sys.stdin.readline  #파이썬에서 input 여러줄을 입력하기 위한 sys.stdin.readline
target = int(input()) #수빈이가 이동하려고 하는 채널
n = int(input())  #고장난 버튼의 개수
broken = list(map(int, input().split())) #어떤버튼이 고장났는지 input.split로 입력된 수를 잘라서 map으로 중복 없애고( 같은 버튼이 여러 번 주어지는 경우는 없다.) list안에 담음 

# 현재 채널에서 + 혹은 -만 사용하여 이동하는 경우
min_count = abs(100 - target) #수빈이가 현재 보고 있는 채널 - 수빈이가 이동하려는 채널의 절대값

for nums in range(1000001): #채널의 개수는 무한이므로 채널의 개수범위를 500000X2로 1000000으로 잡고 (리모컨에는 버튼이 0부터 9까지 숫자가 있으므로 0~9의 수를 조합하되 조합 범위를 100000으로 잡음)
    nums = str(nums)  #0~100000 총 채널을 int형에서 string으로 형변환시킨후 nums 리스트에 넣어줌 num = [0~100000] 0~100000까지의 모든 채널의 수를 list에 넣고
    
    for j in range(len(nums)):  #0~100000채널을 수빈이가 0~9숫자 버튼을 0부터 순차적으로 입력해서 
        # 각 숫자가 고장났는지 확인 후, 고장 났으면 (0~100000채널에서 고장난 버튼이 있는 채널은 리모컨으로 입력 불가능) break
        if int(nums[j]) in broken:
            break

        # 고장난 숫자 없이 마지막 자리까지 왔다면 min_count 비교 후 업데이트
        elif j == len(nums) - 1:  
            min_count = min(min_count, abs(int(nums) - target) + len(nums)) #현재 클릭한 버튼횟수의 최소값과 현재 수빈이가 누른 버튼의 자리수 - 수빈이가 목표로하는 채널 (추가적으로 + or -버튼을 수빈이가 눌러야 하는 횟수) + 수빈이가 누른 버튼의 자리수의 개수 

print(min_count) #최소값 출력

 

1.

https://velog.io/@yeseolee/Python-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%85%EB%A0%A5-%EC%A0%95%EB%A6%ACsys.stdin.readline

 

[Python 문법] 파이썬 입력 받기(sys.stdin.readline)

파이썬으로 코딩 테스트를 준비한다면, 반드시 알아야 할 입력방식인 sys.stdin.readline()에 대한 정리 입니다.

velog.io

 

input을 한줄로 입력받으면 input()을 사용하지만 여러줄을 입력받으면 sys.stdin.readline()을 사용한다 Runtime error 방지용

 

2.

https://wikidocs.net/174562

 

 

02. 문자열 자료형(str)

앞서 `print('Hello World')`를 통해서 `Hello World`를 출력하는 실습을 진행한 바 있습니다. 파이썬과 같은 프로그래밍 언어에서는 글자를 문자열(stri…

wikidocs.net

nums int형을 str(num)으로 string형으로 변환후 nums 배열에 넣어줌

 

 

3.

https://www.freecodecamp.org/korean/news/python-for-loop-for-i-in-range-example/

 

Python의 For 반복문 - For i in Range 예제

반복문은 모든 프로그래밍 언어에서 주요 제어문 중 하나이며 Python에서도 마찬가지입니다. 이번 글에서는 Python의 range() 함수와 함께 for 반복문을 사용한 몇 가지 예제를 살펴보겠습니다. Python

www.freecodecamp.org

in range(100001)  i = 0 i<100001 i++

 

 

4.

https://dowtech.tistory.com/43

 

파이썬 if ~ not in의 사용

파이썬 문법 중 if~in / if ~ not in 에 대한 내용이다. 항상 헷갈리는 부분이라서 정리해둔다. (0) 기본적인 사용방법은 다음과 같다. if A in B : B안에 A가 있으면 참(true)이다. if A not in B : B안에 A가 없

dowtech.tistory.com

예제입력 1

5457
3
6 7 8

 

target = 5457

n = 3

broken={6,7,8}

0~100000까지 채널을 돌리면서 채널번호에 6 7 8 번호가 있는 경우 break 부서진 번호임으로 입력안됨

 

'Python' 카테고리의 다른 글

파이썬 자료형  (0) 2023.08.22
백준 10828 Python  (0) 2023.08.22
백준 1476 Python  (0) 2023.08.08
백준 3085 Python  (0) 2023.08.05
백준 2309 파이썬  (0) 2023.08.03