CAPS 위키 : BOJ 11003 최솟값 찾기

BOJ 11003 최솟값 찾기 [ 수정 내역 ] [ 수정 ]

최근 수정:

목차

1. 문제

2. 입력

3. 출력

4. 풀이

4.0.1. python

4.0.1.0.1. 코드

4.0.1.0.2. 풀이 및 설명

4.0.2. c++

4.0.2.0.1. 코드

1. 문제

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

N개의 수 A1, A2, ..., AN과 L이 주어진다.

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

2. 입력

첫째 줄에 N과 L이 주어진다. (1 ≤ L ≤ N ≤ 5,000,000)

둘째 줄에는 N개의 수 Ai가 주어진다. (-10^9 ≤ Ai ≤ 10^9)

3. 출력

첫째 줄에 Di를 공백으로 구분하여 순서대로 출력한다.

4. 풀이

4.0.1. python

4.0.1.0.1. 코드

코드

4.0.1.0.2. 풀이 및 설명

1~5번째 줄은 입력을 받는 줄입니다. 주어진 문제의 입력에 맞게 n,m의 값, 전체 수열을 입력받았습니다.

6번째 줄은 deque 자료구조를 사용한 lis2 배열을 만들어 주었습니다.

7번째줄은 for문이 전체 수열을 순회할 수 있도록 n으로 설정해주었습니다.

12번째줄은 해당 lis2 배열이 어떻게 구성되어 있는지 알려줍니다. 해당 튜플은 배열의 원소와 인덱스를 저장해 lis2 덱 자료구조에 추가합니다.

8~9번째 줄은 if문을 만족하면 lis2 배열의 가장 왼쪽 요소를 없애는 방식으로, if문은 lis2가 비어있지 않음과 동시에 첫 번째 요소의 인덱스가 i-m+1 미만인지를 검사합니다.

10~11번째 줄은 lis2 배열의 길이가 0보다 크고, 제일 끝 요소의 원소값이 이제 추가될 요소의 요소값보다 클동안 lis2의 끝 값을 없앱니다.

13번째 줄은 이로써 가장 앞에 있는 요소가 최솟값이 되게 되고, 해당 최솟값의 원소값을 출력합니다.

4.0.2. c++

4.0.2.0.1. 코드

코드