๋ฐํฌ๋ ์ ํ์๋ฃ๊ตฌ์กฐ ์ค์์๋ ์๋ฐฉํฅ์์ ์ฝ์ ์ญ์ ๊ฐ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. (stack + Queue)
์ด๋ฌํ ๋ฐํฌ๋ ์ฌ์ฉ์ ์ผ๋ถ๊ธฐ๋ฅ์ ์ ํํ์ฌ ์ฉ๋์ ๋ง๊ฒ ๋ณํ ๊ฐ๋ฅํ๋ค.
๋ํ ๋ฐํฌ๋ ์ฝ์ ์ถ๋ ฅ๋ฐ ์ญ์ ๋ฅผ ํ๋ ๋ฉ์๋๊ฐ ๊ฐ๊ฐ ๋ ๊ฐ์ฉ ์๋ค.
1. add ์ remove : ํด๋น ๋ฉ์๋๋ ์์ธ์ฒ๋ฆฌ์ ๋ง์ด ์ฌ์ฉํ๋ค. (์๋ํ๋ฉด null๋ฑ์ ๋ฐํํ์ง ์๊ณ ์์ธ์ฒ๋ฆฌ ๋ฐ์์ ํ๊ธฐ ๋๋ฌธ์ด๋ค.)
2. offer ์ poll : null ์ด๋ false๋ฅผ ๋ฐํํด์ค๋ค.
๋ฐํฌ์ ์ข ๋ฅ 2๊ฐ์ง
1. ์ ๋ ฅ์ ํ ๋ฐํฌ (Scroll) : ํ์ชฝ์ ์ ๋ ฅ์ ์ ํํ ๋ฐํฌ
2. ์ถ๋ ฅ์ ํ ๋ฐํฌ (Shelf) : rear ๋ front ์ชฝ ์ค ํ๋์ ์ถ๋ ฅ์ ์ ํํ ๋ฐํฌ
java์์์ ๋ฐํฌ ์ฌ์ฉ
Deque deque = new ArrayDeque();
deque.addFirst(); // front ๋ก add
deque.addLast(); // rear๋ก add
deque.removeFirst(); // Front๋ก remove
deque.removeLase(); // rear๋ก remove
// add ์ remove๋ ๊ฝ์ฐจ์๊ฑฐ๋ ๋น์ด์์ด ์ฝ์ ์ญ์ ๊ฐ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ null์ด๋ false๊ฐ ์๋ ์์ธ์ฒ๋ฆฌ๋ฅผ ๋ฐ์ํ๋ค.
deque.offerFirst(); // front๋ก ๊ฐ ์ถ๊ฐ -> full์์ false ๋ฐํ ๊ฐ๋ฅ
deque.pollLase(); // rear๋ก ๊ฐ ์ญ์ -> empty์์ Null ๋ฐํ ๊ฐ๋ฅ
java์์ importํ์ง ์๊ณ ๋ฐํฌ ๊ตฌํํด๋ณด๊ธฐ
1. ArrayList๋ฅผ ์ด์ฉํ ๋ฐํฌ ๊ตฌํ
์์ฑ์์์ ArrayList ๊ฐ์ฒด ์์ฑ ํ
๋จ์ํ isEmpty, addFirst, addLast, removeFirst, removeLast, printDeque ๋ฉ์๋ ๊ตฌํํ๊ธฐ
* addFirst ๋ฉ์๋ ๊ตฌํ์ index 0์ ์ฝ์
* getํ ๋ (size - 1) ๋ฒ index๊บผ ๊บผ๋ด์ค๊ธฐ
2. ๋ฐฐ์ด์ ์ด์ฉํ ๋ฐํฌ ๊ตฌํ
isEmpty : rear == front ์ผ๋
isFull : (rear + 1) % length == front ์ผ๋
addFirst : isFull์ด ์๋๋ data ๋ฃ๊ณ , front = (front -1 + arr.length) % arr.length;
addLast : isFull์ด ์๋๋, data๋ฃ๊ณ , rear = (rear + 1 ) % arr.length;
removeFirst : isEmpty๊ฐ ์๋๋, front = (front + 1) % arr.length; return arr[front];
removeLast : isEmpty๊ฐ ์๋๋, data = arr[rear]; ํ !!! rear = (rear - 1 + arr.length) % arr.length; return data;
๋ฐํฌ๋ฅผ ์ด์ฉํ ์ฐ์ต๋ฌธ์
๋ฌธ์ 01) 0 -> 1-> ... -> n-1 -> n์ ํํ๋ฅผ 0 -> n -> 1 -> n-1 -> ... ํํ๋ก ๋ณํํ๊ธฐ
code)
Deque deque = new ArrayDeque();
ArrayList result = new ArrayList();
IntStream.of(arr).forEach(x -> deque.addLast(x));
while(!deque.isEmpty()){
result.add(deque.removeFirst();
if(!deque.isEmpty()){
result.add(deque.removeLat();
}
}
๋ฌธ์ 01) ํ ๋ฆฐ๋๋กฌ (palindrome) ์ฐพ๊ธฐ (์์ผ๋ก ์ฝ๋ ๋ค๋ก ์ฝ๋ ๋๊ฐ์ด ์ฝํ๋ ๋ฌธ์๋ฅผ ๋งํ๋ค.)
code)
Deque duque = new ArrayDeque();
boolean isFront = true;
boolean isPalindrome = true;
for(String s : str.split(" ")){
deque.addFirst(s);
}
while( !deque.isEmpty()){
String s1 = deque.pollFirst();
String s2 = deque.pollLast();
// remove ๋์ poll์ ์ด์ฉํ๋ฉด null ๋ฐํ ๊ฐ๋ฅํด์ง
//๊ธ์์๊ฐ ํ์๊ฐ์ธ ๊ฒฝ์ฐ๋ฅผ ์ํด s2๊ฐ null์ด์ฌ๋ ์์ธ์ฒ๋ฆฌ๊ฐ ๋ฐ์๋์ง ์๊ฒ ํด์ฃผ์ด์ผํ๋ค!
if( s1 != null && s2 != null && !s1.equals(s2)){
isPalindrome = false;
break;
}
}
return isPalindrome;
๋ฌธ์ 03) ๋ฐฐ์ด๋ก ๋ฐํฌ๊ตฌํ & middle data ๋ฃ๊ธฐ
๋ฌธ์ 04) ๋ฐฐ์ด๊ณต๊ฐ์ด ๊ฐ๋์ฐผ์๋ 2๋ฐฐ๋ก ๋๋ฆฐ ๊ณต๊ฐ์ผ๋ก ๋ฐํฌ ์ฎ๊ธฐ๊ธฐ
'์๊ณ ๋ฆฌ์ฆ > ์๋ฃ๊ตฌ์กฐ ์ด๋ก ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
HashMap - ์๋ฃ๊ตฌ์กฐ (0) | 2024.06.20 |
---|---|
Array(๋ฐฐ์ด) - (์ ํ)์๋ฃ๊ตฌ์กฐ (0) | 2024.06.19 |
Queue - ์ ํ ์๋ฃ๊ตฌ์กฐ (0) | 2024.06.18 |
Stack - (์ ํ)์๋ฃ๊ตฌ์กฐ (0) | 2024.06.18 |
์๋ฃ๊ตฌ์กฐ - ์ฐ์ ์์ ํ (0) | 2023.05.22 |