본문 바로가기

스택

(3)
[백준] 2605번: 줄 세우기 (C++ 풀이) 문제풀이스택 2개를 써서 풀었다.대신 답을 출력해야하는 스택은 뒤집고 출력하고 까다로우니까 벡터를 스택처럼 이용해서 풀었다.1. 투표로 뽑은 수만큼 벡터에 있는걸 pop해서 그대로 스택에 넣어두고2. 해당 사람 벡터에 넣고3. 다시 스택에 있는 것들을 모두 pop해서 그대로 벡터에 다시 넣는다.4. 1~3을 사람 수만큼 반복하면 된다. 코드결과
[백준] 1918번: 후위표기식 (C++ 풀이) 문제https://www.acmicpc.net/problem/1918 풀이중위표기식(infix)을 후위표기식(postfix)로 변환하는 문제이다. 연산자의 위치에 따라 표기식의 이름이 달라진다.전위표기식(prefix)  : * A B중위표기식(infix)    : A * B후위표기식(postfix) : A B * 스택을 이용해서 풀었다. 1. 피연산자일 경우 -> 결과문자열에 추가2. 연산자일 경우① '('- 스택에 넣는다.② ')'- 스택의 top이 '(' 일때까지 top값을 결과문자열에 추가 & pop- '('까지 pop③ '+' or '-'- 스택이 비어질때까지 또는 스택의 top이 '(' 일때까지 top값을 결과문자열에 추가 & pop- 스택에 넣는다. ④ '*' or '/'- 스택이 비어질때까지..
[백준] 2493번: 탑 (C++ 풀이) 문제https://www.acmicpc.net/problem/2493 풀이처음에 이 문제를 의식의 흐름대로 생각해보면, 끝에서부터 앞으로 가면서 제일 처음 만나는 수 중 자신보다 큰 수의 인덱스를 저장하는 방법인데이 방법대로 한다면 이중 for문을 돌려야 한다. 그러나 n이 500,000이기 때문에 시간초과가 되므로 다른 방법을 찾아야한다! 바로 스택을 이용하는 방법이다. 스택이 비어있다면, 스택에 인덱스와 값을 넣는다.비어있지 않다면, 스택의 탑이 값보다 작으면 다 pop시킨다.그래서 비어있으면 push하고, 아니면 스택의 탑에 있는 인덱스 값을 정답 배열에 알맞게 저장해놓는 것이다. 56 9 5 7 4 로 예를 들면,  순서 : (1, 6)stack : -> 처음에 스택이 비어있으므로 push 한다...