Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 순열
- 가장 긴 증가하는 부분 수열
- LIS
- 위상정렬
- 16933
- C++1167
- Backtracking
- 문자열
- 소트 게임
- C++
- 투포인터
- C++ 1937
- 백준
- 백준 숨바꼭질5
- 프로그래머스
- DP
- 백트래킹
- c언어
- 조합
- C++ 1918
- 백준 17071
- C++1967
- C++ 17071
- strtok
- 조합론
- BFS
- 다익스트라
- 인덱스 트리
- DFS
- 알고리즘
Archives
- Today
- Total
블로그
[1일차] 알고리즘 기초 A - 3425: 고스택 본문
728x90
골드 Ⅲ
#include <iostream>
#include <cstdlib>
#include <stack>
#include <vector>
#include <string>
#define MAXNUM 1000000000
using namespace std;
int main() {
while (1) {
//새 프로그램마다 재정의 -> 비워줄 필요없음
vector<pair<string, int>> cmds;
//프로그램 영역
while (1) {
string cmd;
cin >> cmd;
int X = 0;
//전체 프로그램 종료
if (cmd == "QUIT") return 0;
else if (cmd == "END") break;
else if (cmd == "NUM") scanf("%d", &X);
cmds.push_back(make_pair(cmd, X));
}
int N;
scanf("%d", &N);
//입력영역
while (N--) {
//재정의
stack<int> gostack;
int baseNum;
scanf("%d", &baseNum);
gostack.push(baseNum);
int is_error = 0;
for (int i = 0; i < cmds.size(); i++) {
string cmd = cmds[i].first;
int X = cmds[i].second;
if (cmd == "NUM") gostack.push(X);
else if (cmd == "POP") {
if (gostack.empty()) {
is_error = 1;
break;
}
gostack.pop();
}
else if (cmd == "INV") {
if (gostack.empty()) {
is_error = 1;
break;
}
gostack.push((-1) * gostack.top());
}
else if (cmd == "DUP") {
if (gostack.empty()) {
is_error = 1;
break;
}
gostack.push(gostack.top());
}
else if (cmd == "SWP") {
if (gostack.size() < 2) {
is_error = 1;
break;
}
int top1 = gostack.top();
gostack.pop();
int top2 = gostack.top();
gostack.pop();
gostack.push(top1);
gostack.push(top2);
}
else if (cmd == "ADD") {
if (gostack.size() < 2) {
is_error = 1;
break;
}
long long top1 = gostack.top();
gostack.pop();
long long top2 = gostack.top();
gostack.pop();
long long result = top1 + top2;
if (abs(result) > MAXNUM) {
is_error = 1;
break;
}
gostack.push(result);
}
else if (cmd == "SUB") {
if (gostack.size() < 2) {
is_error = 1;
break;
}
long long top1 = gostack.top();
gostack.pop();
long long top2 = gostack.top();
gostack.pop();
long long result = top2 - top1;
if (abs(result) > MAXNUM) {
is_error = 1;
break;
}
gostack.push(result);
}
else if (cmd == "MUL") {
if (gostack.size() < 2) {
is_error = 1;
break;
}
long long top1 = gostack.top();
gostack.pop();
long long top2 = gostack.top();
gostack.pop();
//long long 범위안에 들어감
long long result = top1 * top2;
if (abs(result) > MAXNUM) {
is_error = 1;
break;
}
gostack.push(result);
}
else if (cmd == "DIV") {
if (gostack.size() < 2) {
is_error = 1;
break;
}
int top1 = gostack.top();
gostack.pop();
//DIVBYZERO
if (top1 == 0) {
is_error = 1;
break;
}
int top2 = gostack.top();
gostack.pop();
int minusCnt = (top1 < 0) + (top2 < 0);
gostack.push(abs(top2) / abs(top1) * (minusCnt == 1 ? -1 : 1));
}
else if (cmd == "MOD") {
if (gostack.size() < 2) {
is_error = 1;
break;
}
int top1 = gostack.top();
gostack.pop();
//DIVBYZERO
if (top1 == 0) {
is_error = 1;
break;
}
int top2 = gostack.top();
gostack.pop();
gostack.push(top2 % top1);
}
}
//해당 baseNum에 대한 연산 종료
if (is_error == 1 || gostack.size() != 1) printf("ERROR\n");
else printf("%d\n", gostack.top());
}
printf("\n");
}
}
놀랍게도 이거 푸느라 1일차 dfs bfs 거의 다 날렸다
왜그러냐 진짜??!
게다가 계속 틀렸다
아직도 모르겠다
예외처리 안됐거나 문제를 잘못 읽은거일듯
'SDS ( -> PS)' 카테고리의 다른 글
[2일차] 시간복잡도 J - 2842: 집배원 한상덕 (0) | 2022.01.06 |
---|---|
[2일차] 시간복잡도 H - 1072: 게임 (0) | 2022.01.06 |
[2일차] 시간복잡도 E - 2748: 부분합 (0) | 2022.01.06 |
[2일차] 시간복잡도 C - 2748: 피보나치 수 2 (0) | 2022.01.06 |
[2일차] 시간복잡도 A - 2003: 수들의 합 2 (0) | 2022.01.06 |
Comments