π Leetcode42 Trapping Rain Water hard
- μ€ν νμ΄
class Solution: def trap(self, height: List[int]) -> int: stack = [] result = 0 for i in range(len(height)): while stack and height[i] >= height[stack[-1]]: top = stack.pop() if not stack: break distance = i - stack[-1] - 1 waters = min(height[i], height[stack[-1]]) - height[top] result += distance * waters stack.append(i) return result
- ν¬ ν¬μΈνΈ λ°©μμΌλ‘ νΈλ λ°©λ²λ μμ§λ§ μ΄ν΄κ° μ λμ§ μμ λ€μ νμ΄λ΄μΌκ² λ€.
#include <bits/stdc++.h> λ
μ ν€λ νμΌμ λͺ¨λ λͺ¨λ νμ€ ν€λ νμΌμ΄ ν¬ν¨λ ν€λ νμΌμ΄λ€. μ ν€λ νμΌ ν λ²λ§ μμ±νλ©΄ λͺ¨λ ν€λνμΌμ μ¬μ©ν μ μμ§λ§ λ¨μ μΌλ‘λ λΆνμν ν€λνμΌλ μΆκ°λκΈ° λλ¬Έμ ν¬κΈ°κ° 컀μ§κ³ μ»΄νμΌ μκ°μ΄ κΈΈμ΄μ§λ€λ λ¨μ μ΄ μλ€.
μ°λΆν¬ μλ κ²½λ‘μ stdc++.h νμΌμμ μ΄λ€ ν€λλ€μ΄ μλμ§ νμΈν μ μλ€.
/usr/include/x86_64-linux-gnu/c++/7/bits
// C++#include <algorithm> #include <bitset> #include <complex> #include <deque> #include <exception> #include <fstream> #include <functional> #include <iomanip> #include <ios> #include <iosfwd> #include <iostream> #include <istream> #include <iterator> #include <limits> #include <list> #include <locale> #include <map> #include <memory> #include <new> #include <numeric> #include <ostream> #include <queue> #include <set> #include <sstream> #include <stack> #include <stdexcept> #include <streambuf> #include <string> #include <typeinfo> #include <utility> #include <valarray> #include <vector>
#include <iostream> #include <stack> using namespace std; int k, result = 0; stack<int> stack_s; int main(void) { ios::sync_with_stdio(0); cin.tie(0); cin >> k; while(k--) { int n; cin >> n; if(n == 0) stack_s.pop(); else stack_s.push(n); } while(!stack_s.empty()) { result += stack_s.top(); stack_s.pop(); } cout << result; }