티스토리 뷰
최솟값 찾기 문제는 슬라이딩 윈도우 알고리즘을 이용합니다.
슬라이딩 윈도우 알고리즘은 덱(Deque)을 이용합니다.
덱은 큐와 스택을 합친 동작읍 합니다.
먼저 입력한 데이터를 출력할 수도 있고, 뒤에서도 출력할 수 있습니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package sdk.backjun; | |
import java.io.BufferedReader; | |
import java.io.IOException; | |
import java.io.InputStreamReader; | |
import java.util.Deque; | |
import java.util.LinkedList; | |
import java.util.StringTokenizer; | |
/** | |
* 백준, 11003, 최솟값 찾기 | |
* https://www.acmicpc.net/problem/11003 | |
* | |
* @author whitebeard-k | |
* | |
*/ | |
public class Problem11003 { | |
public static void main(String[] args) throws NumberFormatException, IOException { | |
Deque<Node> deque = new LinkedList<>(); | |
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | |
StringTokenizer st = new StringTokenizer(br.readLine()); | |
int N = Integer.parseInt(st.nextToken()); // N개의 수 | |
int L = Integer.parseInt(st.nextToken()); // L개의 수 중 최소값 | |
st = new StringTokenizer(br.readLine()); | |
int[] array = new int[N]; | |
for (int i = 0; i < N; i++) { | |
array[i] = Integer.parseInt(st.nextToken()); | |
} | |
StringBuffer buffer = new StringBuffer(); | |
for (int i = 0; i < N; i++) { | |
Node node = new Node(array[i], i); | |
if (!deque.isEmpty() && deque.peekFirst().index <= i - L) { // 인덱스를 넘어가면 앞쪽에서 제거 | |
deque.removeFirst(); | |
} | |
while (!deque.isEmpty() && deque.peekLast().value > node.value) { // 인덱스안이면 뒤쪽에서부터 자기보다 큰 값을 제거 | |
deque.removeLast(); | |
} | |
deque.addLast(node); | |
buffer.append(deque.peekFirst().value).append(" "); // 출력을 위한 최소값을 계속 추가 | |
} | |
System.out.println(buffer); | |
} | |
public static class Node { | |
int index; | |
int value; | |
public Node(int value, int index) { | |
this.index = index; | |
this.value = value; | |
} | |
} | |
} |
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준][삼성SW검정] 15684 사다리조작 (0) | 2019.02.07 |
---|---|
[백준] 15686 치킨 배달 (0) | 2019.02.06 |
[백준][DP] 9184 신나는 함수 실행 (0) | 2019.02.02 |
[백준] 2151 거울 설치 (0) | 2019.01.29 |
[백준][삼성SW검정] 14502 연구소 (0) | 2019.01.11 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Linux
- 하둡
- error
- hbase
- 파이썬
- 다이나믹
- 알고리즘
- 오류
- Tez
- HDFS
- nodejs
- 하이브
- yarn
- S3
- 백준
- ubuntu
- Python
- build
- oozie
- HIVE
- SPARK
- AWS
- java
- SQL
- bash
- emr
- 정올
- mysql
- airflow
- Hadoop
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함