파이썬/코딩테스트

[Do-it 코딩 테스트] 010.최솟값 찾기1(11003)

거북이07 2023. 11. 4. 23:26

문제

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

 

11003번: 최솟값 찾기

N개의 수 A1, A2, ..., AN과 L이 주어진다. Di = Ai-L+1 ~ Ai 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i ≤ 0 인 Ai는 무시하고 D를 구해야 한다.

www.acmicpc.net


코드

내가 작성한 코드

num1, num2 = map(int, input().split())
arr = list(map(int, input().split()))
result = []

for i in range(num2 - 1):
    arr.insert(0, float("inf"))

for i in range(num1):
    result.append(min(arr[i:num2 + i]))
    print(result[i])

해석

예제 입력1 예제 출력2
12 3
1 5 2 3 6 2 3 7 3 5 2 6
1 1 1 2 2 2 2 2 3 3 2 2
num1, num2 = map(int, input().split())
arr = list(map(int, input().split()))
result = []

 

우선 숫자의 개수, 슬라이딩 영역을 input으로 num1, num2 변수에 각각 담아주고 리스트 배열을 만들어 입력받은 숫자를 넣어주었다.

 

for i in range(num2 - 1):
    arr.insert(0, float("inf"))

 

아래 이미지처럼 영역의 크기를 동일하게 유지시켜주기 위해 arr[0] 앞에 float("inf") 가상의 값을 넣어 슬라이딩 영역의 크기를 동일하게 맞춰주었다.

for i in range(num1):
    result.append(min(arr[i:num2 + i]))
    print(result[i])

 

num1만큼 반복을 진행해주고 미리 선언해놓았던 result 배열에 arr[i] 최소값을 append 해준 후 result[i]를 출력해준다.