코딩 스터디

momo study(23.01.17)

hunm719 2023. 1. 17. 21:26

오늘은 스택/큐 문제를 풀어보고 하나하나 복습했다.

전체적으로 문제가 어렵다고 느꼈는데 개인적으로 스택은 조금 더 할만하다고 느끼고, 큐는 학습이 부족하다고 느꼈다.

 

1.스택 문제(브라우저 앞으로 가기 뒤로 가기) - String[] actions와 String start를 받아 actions에 대문자 영어가 들어가면 새로운 인터넷 페이지를, 1을 입력받으면 앞으로 가기, -1을 입력 받으면 뒤로 가기를 실행하는 클래스를 생성하는 문제였다.

 

수도코드를 레퍼런스와 거의 유사하게 적었던 문제로, 아쉽게도 stack의 push()와 pop()부분의 이해가 살짝 부족해 푸는데 시간이 많이 걸렸었다.

 

2.큐 문제(박스 포장) - 큐의 기본 개념에 뒷사람이 포장을 전부 끝냈어도 앞사람이 끝내지 못하면 기다려야 한다는 제약이 더해진 문제로, 배열을 입력 받으면 통틀어 최대 몇 명이 한꺼번에 나가는지 알 수 있도록 함수를 구현하는 문제였다.

 

현재까지 나갈 수 있는 짐의 크기와, 앞서 비교한 값 중 큰 값을 할당해야한다는 중요하는 부분은 스스로 캐치해냈지만 전체적으로 코드로 작성하는데 실패해 레퍼런스를 보고 이해한 문제였다.

 

3.Advanced 큐 문제(프린터) - 프린터의 인쇄 작업 목록의 크기(Buffersize)와 최대 용량(Capacity)을 가정하고 각기 다른 용량의 문서(documents)를 차례대로 인쇄하여 모든 문서가 인쇄되는데 걸리는 최소 시간을 반환하는 솔루션을 구현하는 문제였다.

 

굉장히 어려웠으며 꽤 오랜 시간 수도 코드를 작성해보려고 노력했지만 부족한 부분을 느꼈고 결국 레퍼런스를 봤지만 if중첩이 3개가 들어간 걸 보고 잠시 정신이 혼미해졌던 문제다. 30분에 달하는 문제 해설 동영상을 보고 나니 어느 정도 이해는 했지만 막상 이 문제를 다시 풀어보라고 해도 막히는 부분이 있을 것 같아 추가적인 공부가 필요하다.

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
31
package com.codestates.coplit; 
import java.util.*;
 
public class Solution { 
    public int queuePrinter(int bufferSize, int capacities, int[] documents) {
    // TODO:                      2               10            [7,4,5,6]
    //1.작업 목록을 만들어야됨(크기 int bufferSize, int capacities가 존재) 큐 생성 및 documents할당
    //2.반복문을 돌리면 될 건데 while이 적절할 것 같고 
    // 초기화 count=1, 조건식!documents.isEmpty
    // if에 docu에서 poll해온
 
    Queue<int[]> queue = new LinkedList<>(Arrays.asList(documents));
    int first = queue.poll();              //f7
    int count = 0;
    for(int i = 0; i <= documents.length; i++) {          //docu배열 전부 순회
      int compare = queue.poll();                             //c4                   //c5             //c6                           //c빈배열
      //버퍼사이즈배열 요소를 다 하나씩 다음 요소로 옮겨줘야함  [0,3,2]               [0,f7]          [0,c5]                           [0,f5]
 
      if (capacities < (first + compare)) {              //10<7+4                                     //10<f5+c6                     
        //버퍼사이즈배열 요소 1에 first를 넣고            //인덱스0에 f7넣고[f7,0]                     //인덱스0에 f5넣고[f5,c5]      
        //count++                                        //count = 1                                  //count = 3
        //first = compare                                //f4                                         //f6
      }
      else if(capacities >= (first + compare)) {                                   //10>f4+c5                                        //10>f5
        //버퍼사이즈배열 요소 1에 compare를 넣고                                    //인덱스0에 c5넣고[c5,f7]                         //인덱스0에 
        //count++                                                                  //count = 2  
        //first = compare                                                          //f5
      }
    }
    }
}
cs

위의 코드는 내가 생각해봤던 수도코드로 동영상을 보고 오니 부족한 점이 많이 보이는데 굳이 이곳에 업로드 하는 이유는 앞으로 수도코드를 작성할 때 이렇게 알아보기 힘들게 적지 말자는 의미이다.

'코딩 스터디' 카테고리의 다른 글

momo study(23.01.20)  (1) 2023.01.20
momo study(23.01.19)  (1) 2023.01.19
momo study(23.01.16)  (0) 2023.01.16
momo study(23.01.15)  (0) 2023.01.15
momo study(23.01.13)  (0) 2023.01.13