본문 바로가기
  • Adillete
【스터디노트】/▷TIL

99클럽 코테 스터디 5일차 TIL + 오늘의 학습 키워드 스택과 큐

by 아딜렛 2025. 4. 4.

 

- 오늘의 학습 키워드 스택과 큐
- 공부한 내용 본인의 언어로 정리하기

 

문제의 목적: 큐 구조를 스택 구조로 변경한다.

기본적인 아이디어: 큐는 FIFO 구조 이고

스택은 LIFO 구조여서 큐 2개를 이용해서 queue1에 있는 값을 queue2 에 마지막 하나만 제외하고 

이동시킨다.

마지막 하나를 top 메서드를 읽고 topElement를 반환한다. 

수도 코드

클래스 MyStack:
    큐 queue1, queue2 선언
    
    생성자 MyStack():
        queue1을 새 큐로 초기화
        queue2를 새 큐로 초기화
    
    함수 push(x):
        queue1에 x 추가
    
    함수 pop():
        queue1의 크기가 1보다 큰 동안:
            queue1에서 요소를 제거하여 queue2에 추가
        
        topElement = queue1에서 요소 제거
        
        queue1과 queue2 교환
        
        topElement 반환
    
    함수 top():
        queue1의 크기가 1보다 큰 동안:
            queue1에서 요소를 제거하여 queue2에 추가
        
        topElement = queue1의 첫 요소 확인
        queue2에 queue1에서 제거한 요소 추가
        
        queue1과 queue2 교환
        
        topElement 반환
    
    함수 empty():
        queue1이 비어있으면 true 반환, 아니면 false 반환

 


- 오늘의 회고
  - 어떤 문제가 있었고, 나는 어떤 시도를 했는지

 queue1과 queue2를 사용할 때 pop() 메소드에 어떻게 하나만 남기는지 이해를 못했음

①"모든 last 에 들어온게 처음 나가야하는데 queue1 중 하나만 빼고 queue2로 옮기는데 마지막수는 어떻게 남기는지?"
②top에서는 왜 peek() 을 사용할까?

③peek() 과 pop() 의 차이점?

Queue<Integer> temp = queue1;
queue1=queue2;
queue2=temp;

 


  - 어떻게 해결했는지

gpt랑 같이 공부했다.

public int top(){

//queue1에서 마지막 요소를 제외한 모든 요소를 queue2로 이동
while(queue1.size()>1){
    queue2.add(queue1.remove());
}
//마지막 요소 (스택의 top)을 제거하고 단하나의 요소 3을 topElement에 반환
int topElement= queue1.remove();
//이시점에 queue1은 완전히 비어있음 queue2에는 나머지 요소들이 있음
//queue1과 queue2를 스왑
Queue<Integer> temp = queue1;
queue1=queue2;
queue2=temp;

return topElement;
}

 

 


  - 무엇을 새롭게 알았는지

peek() : 요소의 값만 읽고 제거 안한다.

큐에서 요소를 제거하고(queue1.remove()) 그 요소를 queue2에 추가(queue2.add()).
pop() 메소드와의 차이점은, pop()에서는 이 요소를 버린다.

top()에서는 이 요소를 버리지 않고 queue2에 추가해야 하고 맨위 요소값으로 반환


  - 내일 학습할 것은 무엇인지