Algorithm

정올/실전대비/브라우저

Nanamare 2019. 2. 6. 15:30
728x90


표준 웹브라우저는 방문한 페이지들 내에서 이전 이후 페이지를 방문하는 기능이 있다. 

이를 구현하는 방법으로 두 개의 스택을 이용하는 방법이 있다. 
입력으로 아래의 명령들이 들어온다.

BACK : 현재 페이지를 forward stack에 push, backward stack에서 pop하여 현재 페이지로 설정한다. backward stack이 비어있다면 명령을 무시한다. 

FORWARD : 현재 페이지를 backward stack에 push, forward stack에서 pop하여 현재 페이지로 설정한다. 만약 forward stack이 비었다면 명령은 무시된다. 
VISIT : 현재 페이지를 backward stack에 push, 입력된 URL을 현재 페이지로 설정. forward stack은 비운다. 
QUIT: 프로그램 종료.
 

초기 웹페이지는 http://www.acm.org/로 설정되었다고 가정한다.



 

각 줄에 명령이 입력된다.
URL은 70글자 이하이다.
Stack은 100개를 넘게 쌓이지 않는다고 가정한다.




각 줄마다 현재 페이지를 출력한다.
만약 명령이 무시되면 "Ignored"를 출력한다.



VISIT http://acm.ashland.edu/ 
VISIT http://acm.baylor.edu/acmicpc/ 
BACK 
BACK 
BACK 
FORWARD 
VISIT http://www.ibm.com/ 
BACK 
BACK 
FORWARD 
FORWARD 
FORWARD 
QUIT
http://acm.ashland.edu/ 
http://acm.baylor.edu/acmicpc/ 
http://acm.ashland.edu/ 
http://www.acm.org/ 
Ignored 
http://acm.ashland.edu/ 
http://www.ibm.com/ 
http://acm.ashland.edu/ 
http://www.acm.org/ 
http://acm.ashland.edu/ 
http://www.ibm.com/ 
Ignored




Code

#include <iostream>
#include <string>
using namespace std;

class stack{
public:
int top = -1;
string set[100];
void push(string url);
void pop();
void print();
string geturl();
};

string stack::geturl(){
if (top !=-1){
return set[top];
}
}

void stack::print(){
cout << set[top] << endl;
}

void stack::push(string url){
top++;
set[top] = url;
}

void stack::pop(){
top--;
}


class forwardstack : public stack{
public:
};

class backwardstack : public stack{
public:
};

int main(){
string start;
string current;
backwardstack back;
forwardstack forward;
string url;
current = "http://www.acm.org/";

while (true)
{
cin >> start;
if (start == "VISIT"){
cin >> url;
back.push(current);
cout << url << endl;
current = url;
forward.top = -1;
}
else if (start == "BACK"){
if (back.top != -1){
//current = back.geturl();
forward.push(current);
current = back.geturl();
back.pop();
cout << current;
cout << endl;
}
else
{
cout << "Ignored" << endl;
}

}
else if (start == "FORWARD"){
if (forward.top != -1){
back.push(current);
current = forward.geturl();
forward.pop();
cout << current;
cout << endl;
}
else
{
cout << "Ignored" << endl;
}

}
else
{
if (start == "QUIT"){
return 0;
}
}
}

}


728x90