작성
·
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님의 질문은 Deque
의 push
와 pop
메서드를 활용한 스택(stack) 구조의 동작에 대한 것으로 보입니다. Deque
는 양방향 큐로서 스택과 큐의 동작 방식을 모두 지원하는 자료구조입니다. 코드에서 history
는 Deque
로 선언되어 있으며, 이는 push
를 통해 요소를 가장 앞에 추가하고, pop
을 통해 요소를 가장 앞에서 제거하는 스택 구조로 사용되고 있습니다.
visitPage
메서드:
null
이 아니면 history
스택에 현재 페이지를 push
하고, currentPage
를 새로 방문한 페이지로 설정합니다.history
의 맨 앞에 저장되고, 새로운 페이지가 방문하면서 currentPage
로 업데이트됩니다.goBack
메서드:
history
의 맨 앞 요소(마지막으로 저장된 페이지)를 pop
하여 currentPage
로 설정하고 반환합니다.질문에서 “이 경우는 마지막 전에 입력한 것이 나옵니다”라고 하신 부분은 visitPage
에서 push
가 currentPage
를 history
에 추가하기 때문입니다. 이를 통해 pop
을 호출할 때 마지막에 방문한 페이지가 아닌 그 전 페이지가 나오는 것입니다. 스택은 LIFO(후입선출) 원칙을 따릅니다.
A
를 방문하고 B
를 방문하면 B
가 currentPage
가 되고 A
는 history
에 가장 최근에 추가된 상태로 저장됩니다. 따라서 goBack
을 호출하면 A
가 나옵니다.Deque
의 동작 원칙에 대한 설명이 추가로 제공되고 있으니 참고하시면 도움이 될 것입니다.저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.