-
05 스택Algorithm/baekjoon 2022. 1. 26. 18:59
1. 백준 10773
10773번: 제로
첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경
www.acmicpc.net
(1) 소스코드
#include<iostream> #include<stack> using namespace std; int main() { int len; cin >> len; stack<int> s; while (len) { int element; cin >> element; if (element == 0) { s.pop(); } else { s.push(element); } len--; } int sum = 0; while (s.size()) { sum += s.top(); s.pop(); } cout << sum; }
(2)백준 1874
#include<iostream> #include<stack> #include<string> #include<vector> using namespace std; int main() { std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); bool valid = true; int len;//8 cin >> len; int n = 1; stack<int> s; vector<string>result; int element; cin >> element; for (int i = 0; i < element; i++) { s.push(n); result.push_back("+"); n++; } s.pop(); result.push_back("-"); len--; while (len) { int element2; cin >> element2; if (s.empty()) { if (n == element2) { s.push(n); s.pop(); n++; result.push_back("+"); result.push_back("-"); } //else if(n < element2) { else{ while (n <= element2) { s.push(n); result.push_back("+"); n++; } s.pop(); result.push_back("-"); } } else if (s.top() == element2) { s.pop(); result.push_back("-"); } else if (element2 > s.top()) { while (n <= element2) { s.push(n); n++; result.push_back("+"); } s.pop(); result.push_back("-"); } else { valid = false; } len--; } if(!valid){ cout << "NO"; } else { for (int i = 0; i < result.size(); i++) { cout << result[i] << "\n"; } } return 0; }
c++ 에서 시간초과가 난다?
->endl을 썼는지 확인해볼 필요가 있음!!
endl을 "\n"으로 바꿔서 쓰기!
3. 백준 2493
무려 티어가 골드5....!!
2493번: 탑
첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1
www.acmicpc.net
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<vector> using namespace std; int main() { std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); vector<int> v; int n; scanf("%d",&n); vector<int> answerv(n); for (int i = 0; i < n; i++) { int element; scanf("%d",&element); v.push_back(element); } int max = 0; int flag = 0; for (int j = n - 1; j >=1; j--) { for (int k = j - 1; k >= 0; k--) { max = v[j]; if (v[j] < v[k]) { max = v[k]; answerv[j] = k + 1; flag = 1; break; } } if (flag == 0) { answerv[j] = 0; } } answerv[0] = 0; for (int m = 0; m < answerv.size(); m++) { printf("%d ",answerv[m]); } }
시간초과난 코드다...
이래서 골드5 인거겠지..
나중에 할래
'Algorithm > baekjoon' 카테고리의 다른 글
1924 2007년 (0) 2022.02.12 2028 자기복제수 (0) 2022.02.12 1120 문자열 (0) 2022.02.11 04 연결리스트- 백준 5397 (0) 2022.01.17 03 배열 - 백준 2577/백준 1475/백준 3273 (0) 2022.01.08