인프런 커뮤니티 질문&답변

DG Y님의 프로필 이미지
DG Y

작성한 질문수

김영한의 실전 자바 - 중급 2편

stack구조관련질문

작성

·

28

0

package collection.deque.test.stack;

import java.util.ArrayDeque;
import java.util.Deque;

public class BrowserHistory {
    private  Deque<String> history = new ArrayDeque<>();
    private String currentPage = null;

    public void visitPage(String s) {
        if(currentPage != null){
            history.push(currentPage);
        }
        currentPage = s;
        System.out.println("방문 : "+s);
    }

    @Override
    public String toString() {
        return "BrowserHistory{" +
                "stack=" + history +
                '}';
    }

    public String goBack() {

        if(!history.isEmpty()){
            currentPage = history.pop();
            System.out.println("뒤로가기 : "+currentPage);
            return currentPage;
        }
        return null;
    }
    public void pop(){
        System.out.println(history.pop());

    }
}
문제와풀이3 -stack시간 수업에관한 질문입니다
stack구조의 경우 마지막에 넣은 입력이 pop()을 하면 나오는데
이경우는 마지막 전에 입력한것이 나옵니다 이유가뭘까요??

답변 2

0

안녕하세요. DG Y님, 공식 서포터즈 y2gcoder입니다.

history에는 currentPage를 바로 넣지 않습니다!

youtube.com, google.com, facebook.com 을 visitPage() 한 후에 toString을 호출하여 history 내에 있는 값들을 확인해보시겠습니까?

그 부분을 확인하시고 고민해보시면 이유를 발견하실 수 있으실 거라 생각합니다!

 

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

DG Y님의 질문은 Dequepushpop 메서드를 활용한 스택(stack) 구조의 동작에 대한 것으로 보입니다. Deque는 양방향 큐로서 스택과 큐의 동작 방식을 모두 지원하는 자료구조입니다. 코드에서 historyDeque로 선언되어 있으며, 이는 push를 통해 요소를 가장 앞에 추가하고, pop을 통해 요소를 가장 앞에서 제거하는 스택 구조로 사용되고 있습니다.

코드 분석

  • visitPage 메서드:

    • 새로운 페이지를 방문할 때 현재 페이지가 null이 아니면 history 스택에 현재 페이지를 push하고, currentPage를 새로 방문한 페이지로 설정합니다.
    • 현재 페이지가 history의 맨 앞에 저장되고, 새로운 페이지가 방문하면서 currentPage로 업데이트됩니다.
  • goBack 메서드:

    • 뒤로 가기 기능으로, history의 맨 앞 요소(마지막으로 저장된 페이지)를 pop하여 currentPage로 설정하고 반환합니다.

질문에서 “이 경우는 마지막 전에 입력한 것이 나옵니다”라고 하신 부분은 visitPage에서 pushcurrentPagehistory에 추가하기 때문입니다. 이를 통해 pop을 호출할 때 마지막에 방문한 페이지가 아닌 그 전 페이지가 나오는 것입니다. 스택은 LIFO(후입선출) 원칙을 따릅니다.

  • 예를 들어, 페이지 A를 방문하고 B를 방문하면 BcurrentPage가 되고 Ahistory에 가장 최근에 추가된 상태로 저장됩니다. 따라서 goBack을 호출하면 A가 나옵니다.

추가 참고자료

  • Deque와 Stack, Queue 게시물에서 Deque의 동작 원칙에 대한 설명이 추가로 제공되고 있으니 참고하시면 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

DG Y님의 프로필 이미지
DG Y

작성한 질문수

질문하기