반응형
stack
First in Last Out 구조로 맨 처음 들어간는 형식이다.
Stack<Integer> stack = new Stack<>();
stack.add(1);
stack.add(2);
stack.add(3);
//1 , 2 , 3
stack.pop();
stack.pop();
stack.pop();
//3, 2, 1
stack으로는 주로 페이지를 뒤로가기 페이지 앞으로가기를 할 때 주로 사용하고, 코드를 구현 해 보았다.
Queue<Integer> queue = new LinkedList<>();
queue.add(1);
queue.add(2);
queue.add(3);
///1,2,3
queue.poll();
queue.poll();
queue.poo();
//1,2,3
이 코드는 큐를 이용해 프린터 버퍼 입출력을 나타낸 코드이다.
import java.util.*;
public class Solution {
public ArrayList<Stack> browserStack(String[] actions, String start) {
Stack<String> prevStack = new Stack<>();
Stack<String> nextStack = new Stack<>();
Stack<String> current = new Stack<>();
ArrayList<Stack> result = new ArrayList<>();
current.add(start);
for(String page: actions){
if(page.equals("-1")){
if(current.isEmpty()||prevStack.isEmpty())continue;
nextStack.add(current.pop());
current.add(prevStack.pop());
}else if(page.equals("1")){
if(current.isEmpty()||nextStack.isEmpty())continue;
prevStack.add(current.pop());
current.add(nextStack.pop());
}
else{
if(!current.isEmpty()){
prevStack.add(current.pop());
}
current.clear();
current.add(page);
nextStack.clear();
}
}
result.add(prevStack);
result.add(current);
result.add(nextStack);
return result;
// TODO:
}
}
stack의 특성을 이용하면 쉽게 페이지 원리를 구현 할 수있다. 현재 페이지를 기준으로 stack의 원리를 사용하면 쉽게 구현이 가능하다.
이 코드는 1일때 앞으로가기 -1일 때 뒤로가는 것을 기준으로 구현한 코드이다.
queue
queue는 스택과 다르게 선입선출이다.
예를 들면 줄을 서는 것으로 생각할 수 있다. ,그리고 프린트 버퍼에 들어갔다 출력되는 것을 뜻한다.
package com.codestates.coplit;
import java.util.*;
public class Solution {
class paper{
public paper(int number) {
this.number = number;
}
public int number;
public int index=1;
}
public int sumQue(Queue<paper> queue){
int sum=0;
if(queue.isEmpty())return 0;
else{
for(paper i:queue){
sum+=i.number;
}
}
return sum;
}
public int queuePrinter(int bufferSize, int capacities, int[] documents) {
// TODO:
if(documents.length==0)return 0;
Queue<Integer> printqueue = new LinkedList<>();
for(int i=1;i<documents.length;i++){
printqueue.add(documents[i]);
}
Queue<paper> wait = new LinkedList<>();
paper pi = new paper(documents[0]);
wait.add(pi);
int count =1;
while(true){
if(wait.isEmpty()&&printqueue.isEmpty())break;
if(wait.peek().index==bufferSize){
wait.poll();
count++;
}else count++;
if(!wait.isEmpty()){
for (paper me : wait) {
me.index += 1;
}
}
if(!printqueue.isEmpty()&&wait.size()<bufferSize&&printqueue.peek()+sumQue(wait)<=capacities){
wait.add(new paper(printqueue.poll()));
}
}
return count;
}
}
반응형
'부트캠프 > 코트스테이츠 백엔드 코스' 카테고리의 다른 글
회고 20~23일차 (0) | 2023.03.29 |
---|---|
회고 19일 (0) | 2023.03.20 |
회고 18일차 (0) | 2023.03.15 |
대 회고 1 (2) | 2023.03.13 |
회고 17일차 (0) | 2023.03.10 |