부트캠프/코트스테이츠 백엔드 코스

회고 18일

태태코 2023. 3. 16. 23:44
반응형

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