์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ํ์ฒ์ ๋ฆฌํธ๋ฆฌํธ
- html
- ์ค๋ธ์
- ์นดํ๋๊ฐ
- ๊ฐ์์ ์
- ์๋ฐ์คํฌ๋ฆฝํธ
- dmz๋คํธ์ํฌ
- ์ ๋ฆฌํธ๋ฆฌํธ
- Python
- ์ค๋ผํด
- ์นํผ๋ธ๋ฆฌ์ฑ
- css
- dmz๊ตฌ์ฑ
- dmz๋
- JavaScript
- ์ํ
- Java
- ์ฑ
- ๋๊ฐ
- ํ์ด์ฌ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๊ฐ๋ฐ
- database
- ์๋ฐ
- ํ๋ก๊ทธ๋๋ฐ
- ๋ ์
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ์ฝ๋ฉ
- ๋คํธ์ํฌdmz
- ๋ฐฉํ๋ฒฝdmz
- Today
- Total
JiYoung Dev ๐ฅ
[๋ฐฑ์ค 11003] ์ต์๊ฐ ์ฐพ๊ธฐ : Deque ๋ณธ๋ฌธ
[๋ฐฑ์ค 11003] ์ต์๊ฐ ์ฐพ๊ธฐ : Deque
Shinjio 2024. 10. 29. 22:56๐ ๋ฌธ์
https://www.acmicpc.net/problem/11003
๐ ํ์ด
์ฝํ ์ค๋น๋ฅผ ์ํด Do it! ์๊ณ ๋ฆฌ์ฆ ์ฝ๋ฉํ ์คํธ ์ฑ ์ ๋ณด๋ฉด์ ๊ณต๋ถํ๋ฉฐ ๋ง๋ ๋ฌธ์ ๋ก, Deque๋ฅผ ํ์ฉํ์ฌ ์ต์๊ฐ์ ์ฐพ๋ ๋ฌธ์ ์์ ์ ์ ์์๋ค. ์ฝํ ์ด๋ณด์์ธ ๋๋ ์ฒ์ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ์ด์ค for๋ฌธ์ ์ฌ์ฉํ์ฌ ํธ๋ ๋ฐฉ์์ ์๊ฐํ๋ค. ๊ทธ๋ฌ๋ ํด๋น ๋ฌธ์ ๋ฅผ ์ด์ค For์ผ๋ก ํ ๊ฒฝ์ฐ ์๊ฐ ์ ํ์ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ O(n)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง ๋ฐฉ์์ ์ฐพ์์ผํ๋ค.
์ด ๋ฌธ์ ์์ ์ฌ์ฉํ ์๋ฃ๊ตฌ์กฐ์ธ Deque๋ ๋ฌด์์ผ๊น?
Deque(๋ฑ)์ด๋, ์ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๊ฑฐ๋ ์ญ์ ํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ๋ก LinkedList, ArrayDeque ๋ฑ์ผ๋ก ๊ตฌํํ๋ค.
addFirst(), removeFirst() ํจ์๋ฅผ ํตํด ๋งจ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ , ์ญ์ ํ ์ ์๊ณ ,
addLast(), removeLast() ํจ์๋ฅผ ํตํด ๋งจ ๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ , ์ญ์ ํ ์ ์๋ค.
ํด๋น ๋ฌธ์ ๋ฅผ ํ ๋ ์๋์ ๊ท์น์ ์ดํดํด์ผ ํ์ด ๋ฐฉ์์ ์ดํดํ ์ ์๋ค.
1. deque๋ ์ต์๊ฐ ์(์์ ์ซ์ ์)์ผ๋ก ์ ๋ ฌ๋๋ค.
2. deque์ ํฌ๊ธฐ๋ ์๋์ฐ์ ํฌ๊ธฐ๋ฅผ ๋์ด์๋ฉด ์๋๋ค.
์ด ๊ท์น์ ํ ๋๋ก ๋ง๋ก์จ ๋ฌธ์ ํ์ด ๋ฐฉ์์ ์ค๋ช ํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
- Deque์ ๋ค์ด๊ฐ๋ ๊ฐ์ฒด(class)์ ๊ตฌ์กฐ๋ index์ value๋ฅผ ํฌํจํ๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก Deque.addLast()๋ฅผ ํตํด ์๋กญ๊ฒ ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- ํ์ง๋ง, ๋ง์ง๋ง ์์น์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ๋ง์ฝ ์๋กญ๊ฒ ๋ค์ด์ค๋ ๊ฐ๋ณด๋ค ๊ธฐ์กด์ Last์ ์ ์ฅ๋ ๊ฐ์ด ๋ ํฌ๋ค๋ฉด, ํด๋น ๊ฐ์ removeLast()๋ฅผ ํตํด ์ญ์ ํ๋ค. → ์์ ์ซ์ ์์ผ๋ก ์ ๋ ฌ
- ๊ทธ๋ฆฌ๊ณ , ์๋กญ๊ฒ ๋ค์ด์จ ๋ฐ์ดํฐ์ index์ First์ ์ ์ฅ๋ index์ ์ฐจ์ด๊ฐ ์๋์ฐ์ ํฌ๊ธฐ๋ฅผ ๋์ด์๋ฉด First์ ๊ฐ์ ์ง์ด๋ค.
- ์์ ๊ท์น์ด ์ ์ฉ๋ deque๋ผ๋ฉด ์ต์๊ฐ์ ๋งจ ์(First)์ ์กด์ฌํ๋ ๊ฐ์ด๋ฏ๋ก getFirst()๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ์ฌ ์ถ๋ ฅํ๋ค.
์์์ ํ์ดํ ๋ด์ฉ์ java ์ฝ๋๋ก ์์ฑํ ๋ด์ฉ์ด๋ค.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.Deque;
import java.util.LinkedList;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int countOfNumber = Integer.parseInt(st.nextToken());
int sizeOfWindow = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
Deque<Node> deque = new LinkedList<>();
for(int i = 0 ; i < countOfNumber ; i++){
int now = Integer.parseInt(st.nextToken());
while(!deque.isEmpty() && deque.getLast().value > now){
deque.removeLast();
}
deque.addLast(new Node(now, i));
if(i - deque.getFirst().index >= sizeOfWindow){
deque.removeFirst();
}
bw.write(deque.getFirst().value + " ");
}
bw.flush();
bw.close();
}
static class Node{
int value;
int index;
Node(int value, int index){
this.value = value;
this.index = index;
}
}
}
์ฝ๋์ ํ์ดํ ๋ด์ฉ์ ๋น๊ตํ๋ฉฐ ์ค๋ช ํ์๋ฉด,
- Deque์ ๋ค์ด๊ฐ๋ ๊ฐ์ฒด(class)์ ๊ตฌ์กฐ๋ index์ value๋ฅผ ํฌํจํ๋ค.
Node class๋ฅผ ์๋์ ๊ฐ์ด ์ ์ํ๊ณ , Deque์์๋ ์์ฑํ Node ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฅํ๋ค.
static class Node{
int value;
int index;
Node(int value, int index){
this.value = value;
this.index = index;
}
}
- ๊ธฐ๋ณธ์ ์ผ๋ก Deque.addLast()๋ฅผ ํตํด ์๋กญ๊ฒ ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- ํ์ง๋ง, ๋ง์ง๋ง ์์น์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ๋ง์ฝ ์๋กญ๊ฒ ๋ค์ด์ค๋ ๊ฐ๋ณด๋ค ๊ธฐ์กด์ Last์ ์ ์ฅ๋ ๊ฐ์ด ๋ ํฌ๋ค๋ฉด, ํด๋น ๊ฐ์ removeLast()๋ฅผ ํตํด ์ญ์ ํ๋ค. → ์์ ์ซ์ ์์ผ๋ก ์ ๋ ฌ
- ๊ทธ๋ฆฌ๊ณ , ์๋กญ๊ฒ ๋ค์ด์จ ๋ฐ์ดํฐ์ index์ First์ ์ ์ฅ๋ index์ ์ฐจ์ด๊ฐ ์๋์ฐ์ ํฌ๊ธฐ๋ฅผ ๋์ด์๋ฉด First์ ๊ฐ์ ์ง์ด๋ค.
- ์์ ๊ท์น์ด ์ ์ฉ๋ deque๋ผ๋ฉด ์ต์๊ฐ์ ๋งจ ์(First)์ ์กด์ฌํ๋ ๊ฐ์ด๋ฏ๋ก getFirst()๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ์ฌ ์ถ๋ ฅํ๋ค.
for(int i = 0 ; i < countOfNumber ; i++){
int now = Integer.parseInt(st.nextToken());
while(!deque.isEmpty() && deque.getLast().value > now){
deque.removeLast();
}
deque.addLast(new Node(now, i));
if(i - deque.getFirst().index >= sizeOfWindow){
deque.removeFirst();
}
bw.write(deque.getFirst().value + " ");
}
Deque๋ผ๋ ์๋ฃ๊ตฌ์กฐ ํ์ฉ์ ๋ํด ๋ชฐ๋์ ๋ ๋ฌด์ฒ ์ด๋ ต๊ฒ ๋๊ปด์ง ๋ฌธ์ ์์ง๋ง, ์ด๋ป๊ฒ ํ์ด์ผ ํ ์ง ์๊ณ ๋์ง ํ์ด ์์ฒด๋ ์ด๋ ต์ง ์์๋ค. ์ด๋ฒ ๊ธฐํ๋ฅผ ํตํด ์ ์ ๋ฆฌํด์ ์ ์ฌํ ๋ฌธ์ ๋ฅผ ํ์ด ์์ด ํ ์ ์๋๋ก ์ฐ์ตํด์ผ๊ฒ ๋ค.
'Study > ์๊ณ ๋ฆฌ์ฆ, ๊ตฌํ ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 17298] ์คํฐ์ : Stack (0) | 2024.11.06 |
---|---|
[๋ฐฑ์ค 1874] ์คํ์ผ๋ก ์ค๋ฆ์ฐจ์ ์์ด ๋ง๋ค๊ธฐ : Stack (1) | 2024.11.05 |
[๋ฐฑ์ค 2563] ์ด์ฐจ์ ๋ฐฐ์ด : ์์ข ์ด (0) | 2023.11.08 |