-
[BOJ] 16120 : PPAP
16120 : PPAP 풀이 일반적인 괄호 문자열 문제랑 비슷하게 해결하면 된다. 코드 #include <cstdio> int t; char a[1000003], s[1000003]; int ppap() { if (t < 4) return 0; if (s[t-4]=='P'&&s[t-3]=='P'&&s[t-2]=='A'&&s[t-1]=='P') return 1; return 0; } int main() { scanf("%s", a); int cnt = 0; for (int i = 0; a[i]; i++) { s[t++] = a[i]; while (ppap()) t -= 4, s[t++] = 'P'; } puts(t == 1 && s[0] == 'P' ? "PPAP" : "NP");...
-
[BOJ] 11899 : 괄호 끼워넣기
11899 : 괄호 끼워넣기 풀이 왠지 그냥 짜면 돌아갈 것 같았어 코드 #include <cstdio> #include <stack> using namespace std; char s[55]; stack<char> stk; int main() { scanf("%s", s); for (int i = 0; s[i]; i++) { if (!stk.empty() && stk.top() == '(' && s[i] == ')') stk.pop(); else stk.push(s[i]); } printf("%d", stk.size()); return 0; } 아무말 백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 씨, 씨쁠쁠, JAVA, algorithm, 자바, 알고리즘, 자료구조, 문제, 문제...
-
[BOJ] 2504 : 괄호의 값
2504 : 괄호의 값 풀이 뚜룹뚜빠라빠라 코드 #include <stdio.h> #include <stack> using namespace std; int sum, tmp = 1; char str[33]; stack<char> stk; int main() { scanf("%s", str + 1); for (int i = 1; str[i]; i++) { switch (str[i]) { case '(': btmp *= 2, stk.push('('); break; case '[': tmp *= 3, stk.push('['); break; case ')': if (str[i - 1] == '(') sum += tmp; if (stk.empty()) return !printf("0"); if (stk.top() == '(') stk.pop();...
-
[BOJ] 14727 : 퍼즐 자르기
14727 : 퍼즐 자르기 풀이 분할정복 + 세그트리로 푸는 풀이도 있다. 근데 복잡하다. 그리디하게 생각해보자. 순차적으로 돌면서 현재 막대의 높이가 이전 막대보다 작아졌다면 이전 막대는 현재 막대 이후로 고려할 필요가 없어진다. 넓이를 구해보자. 코드 #include <stdio.h> #include <stack> #include <algorithm> using namespace std; typedef long long ll; struct ABC { int idx, hgt; }; int n, h; ll ans; stack<ABC> stk; int main() { scanf("%d", &n); for (int i = 0; i < n; i++)...
-
[BOJ] 1874 : 스택 수열
1874 : 스택 수열 풀이 스택에 차곡차곡 쌓다가 알맞은 숫자를 만나면 팝팝 해주자! 코드 #include <stdio.h> #include <stack> #include <vector> using namespace std; int n, a[100001]; stack<int> stk; vector<char> ans; int main() { scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &a[i]); int pos = 0; for (int i = 1; i <= n; i++) { stk.push(i), ans.push_back('+'); while (!stk.empty() && stk.top() == a[pos]) { pos++, stk.pop(), ans.push_back('-'); } } if...
-
[BOJ] 10828 : 스택
10828 : 스택 풀이 스택을 쓰자. 코드 #include <bits/stdc++.h> using namespace std; int n, a; stack<int> sta; string str; int main() { for (scanf("%d", &n); n; n--) { cin >> str; if (str == "push") { scanf("%d", &a); sta.push(a); } else if (str == "pop") { if (sta.empty()) printf("-1\n"); else printf("%d\n", sta.top()), sta.pop(); } else if (str == "size") { printf("%d\n", sta.size()); } else if (str == "empty") { printf("%d\n", sta.empty()); } else { if...
-
[BOJ] 10799 : 쇠막대기
10799 : 쇠막대기 풀이 괄호가 나오는 문제는 대부분 stack을 이용하면 풀린다! 룰루랄라 코드 #include <bits/stdc++.h> using namespace std; int cnt, ans; string str; int cmp(char a, char b) { a -= '(', b -= '('; if (a == 0 && b == 0) return 1; if (a == 0 && b == 1) return 2; if (a == 1 && b == 0) return 3; if (a == 1 && b == 1) return 4;...