Skip to content

Commit b6b8da6

Browse files
committed
[Stack] baekjoon-2867
1 parent e3e9254 commit b6b8da6

File tree

4 files changed

+69
-0
lines changed

4 files changed

+69
-0
lines changed

Diff for: โ€ŽREADME.md

+1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
| 02 | | [Baekjoon-2504 ๊ด„ํ˜ธ์˜ ๊ฐ’](./src/Stack/P2504) | |
6060
| 03 | | [Baekjoon-3425 ๊ณ ์Šคํƒ](./src/Stack/P3425) | |
6161
| 04 | | [Baekjoon-2493 ํƒ‘](./src/Stack/P2493) | |
62+
| 05 | โญ๏ธ | [Baekjoon-2867 ์ˆ˜์—ด์˜ ๊ฐ’](./src/Stack/P2867) | |
6263

6364
### Queue
6465

Diff for: โ€Žsrc/Stack/P2867/Main.java

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package Stack.P2867;
2+
3+
import java.io.*;
4+
import java.util.Stack;
5+
6+
public class Main {
7+
8+
static int N;
9+
static int[] nums;
10+
11+
public static void main(String[] args) throws Exception {
12+
System.setIn(new FileInputStream("src/Stack/P2867/input.txt"));
13+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
14+
15+
N = Integer.parseInt(br.readLine());
16+
nums = new int[N];
17+
for (int i = 0; i < N; i++) nums[i] = Integer.parseInt(br.readLine());
18+
19+
Stack<Integer> stack = new Stack<>();
20+
21+
int[] LM = new int[N];
22+
for (int i = 0; i < N; i++) {
23+
while (!stack.empty() && (nums[stack.peek()] <= nums[i])) stack.pop();
24+
LM[i] = stack.empty() ? 0 : stack.peek() + 1;
25+
stack.push(i);
26+
}
27+
28+
stack.clear();
29+
int[] RM = new int[N];
30+
for (int i = N-1; i >= 0; i--) {
31+
while (!stack.empty() && (nums[stack.peek()] < nums[i])) stack.pop();
32+
RM[i] = stack.empty() ? N-1 : stack.peek() - 1;
33+
stack.push(i);
34+
}
35+
36+
stack.clear();
37+
int[] lm = new int[N];
38+
for (int i = 0; i < N; i++) {
39+
while (!stack.empty() && (nums[stack.peek()] >= nums[i])) stack.pop();
40+
lm[i] = stack.empty() ? 0 : stack.peek() + 1;
41+
stack.push(i);
42+
}
43+
44+
stack.clear();
45+
int[] rm = new int[N];
46+
for (int i = N-1; i >= 0; i--) {
47+
while (!stack.empty() && (nums[stack.peek()] > nums[i])) stack.pop();
48+
rm[i] = stack.empty() ? N-1 : stack.peek() - 1;
49+
stack.push(i);
50+
}
51+
52+
long ans = 0;
53+
for (int i = 0; i < N; i++) {
54+
ans += nums[i] * (long)(i- LM[i] + 1) * (long)(RM[i] - i + 1);
55+
ans -= nums[i] * (long)(i- lm[i] + 1) * (long)(rm[i] - i + 1);
56+
}
57+
58+
System.out.println(ans);
59+
}
60+
}

Diff for: โ€Žsrc/Stack/P2867/README.md

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
## [baekjoon-2867] ์ˆ˜์—ด์˜ ๊ฐ’
2+
3+
![image](https://user-images.githubusercontent.com/22045163/93620960-cbe10380-fa15-11ea-8e01-6a4ad07d2633.png)

Diff for: โ€Žsrc/Stack/P2867/input.txt

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
4
2+
3
3+
1
4+
7
5+
2

0 commit comments

Comments
ย (0)