๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/17952)
< ๊ณผ์ ๋ ๋๋์ง ์์! >
๋ฌธ์ ํ์ด
Stack์ ์ฌ์ฉํด์ 0์ด ์ ๋ ฅ๋ ๋๋ stack์์ ๊ฐ์ popํด์ ์๊ฐ์ -1 ์์ผ ๋ค์ stack์ ๋ฃ์ด์ฃผ๋ฉฐ ๋ง์ฝ ์๊ฐ์ด 1์ด๋ผ๋ฉด ๊ณผ์ ๋ฅผ ๋๋ผ ์ ์์ผ๋ฏ๋ก ์ ์๋ฅผ ์ดํฉ์ ๋ํด์ค๋ค. ๋ง์ฝ 1์ด ์ ๋ ฅ๋ ๋๋ stack์ ๊ฐ์ ๋ฃ์ด์ค๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class _17952_ { // ๊ณผ์ ๋ ๋๋์ง ์์!
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int n = Integer.parseInt(bf.readLine());
Stack<int[]> stack = new Stack<>();
int answer = 0;
for (int i = 0; i < n; i++) {
st = new StringTokenizer(bf.readLine());
int num = Integer.parseInt(st.nextToken());
if (num == 0) {
if (!stack.isEmpty()) {
int temp[] = stack.pop();
if (temp[1] == 1)
answer += temp[0];
else
stack.add(new int[] { temp[0], temp[1] - 1 });
}
} else {
int a = Integer.parseInt(st.nextToken());
int t = Integer.parseInt(st.nextToken());
if (t == 1)
answer += a;
else
stack.add(new int[] { a, t - 1 });
}
}
System.out.println(answer);
}
}
Main
๋ณ์)
n : ์ฃผ์ด์ง ์๊ฐ
stack : Stack<[๊ณผ์ ์ ์, ๋จ์ ์๊ฐ]>
answer : ๊ณผ์ ์ ์ ์ดํฉ
num: 0 or 1
- ์ฃผ์ด์ง ์๊ฐ(n) ์ ๋ ฅ
- ์ฃผ์ด์ง ์๊ฐ(n)๋งํผ ๊ณผ์ ์ ๋ ฅ
: 0์ด๋ฉด ๊ณผ์ ๊ฐ ์ฃผ์ด์ง์ง ์์ผ๋ฏ๋ก ๊ณผ์ ์ด์ด์ ์งํ -> ๋ง์ฝ 1๋ถ ๋จ์์ผ๋ฉด ๊ณผ์ ๊ฐ ๋๋๋ฏ๋ก ์ดํฉ(answer)์ ์ ์ ์ถ๊ฐ, 1๋ถ๋ณด๋ค ๋ง์ด ๋จ์๋ค๋ฉด ๋จ์ ์๊ฐ-1 ํด์ stack์ ์ถ๊ฐ
: 1์ด๋ฉด ๊ณผ์ ๊ฐ ์ฃผ์ด์ง๋ฉฐ ๊ณผ์ ๋ฅผ ๋ฐ์๋ง์ ์์ํ๋ฏ๋ก ์๊ฐ-1 ํด์ stack์ ์ถ๊ฐ (์ฃผ์ด์ง๋ ๊ณผ์ ๊ฐ 1๋ถ์ด๋ผ๋ฉด ๋ฐ๋ก ์ข ๋ฃ๋๋ฏ๋ก ์ดํฉ(answer)์ ์ถ๊ฐ)
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 2257_ํํ์๋ (0) | 2023.08.28 |
---|---|
[Baekjoon] 28278_์คํ 2 (0) | 2023.08.25 |
[Baekjoon] 3986_์ข์ ๋จ์ด (0) | 2023.08.23 |
[Baekjoon] 2812_ํฌ๊ฒ ๋ง๋ค๊ธฐ (0) | 2023.08.22 |
[Baekjoon] 2841_์ธ๊ณ์ธ์ ๊ธฐํ ์ฐ์ฃผ (0) | 2023.08.22 |