๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’ป Computer Science/- Data Structure, Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜-PS(์Šคํƒ)] ๋ฐฑ์ค€ 10799๋ฒˆ ์ž๋ฐ” ๋ฌธ์ œ ํ’€์ด. (Stack์„ ํ™œ์šฉํ•˜์—ฌ ํ’€์ด)

by Wonit 2020. 6. 11.

๋ฌธ์ œ

์ž… ์ถœ๋ ฅ ๋ฐ ์˜ˆ์ œ

๋ฌธ์ œ ์ดํ•ด ๋ฐ ์ ‘๊ทผ

์ด๋ฒˆ ๋ฌธ์ œ๋Š” Stack์„ ์ด์šฉํ•˜์—ฌ ํ’€์–ด์•ผํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋ฌธ์ œ๊ฐ€ ์–ด๋ ต๊ฒŒ ๋ณด์ด์ง€๋งŒ ๋‹จ์ˆœํ™”๋ฅผ ์‹œ์ผœ์„œ ๋ณธ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•œ ๋ฌธ์žฅ์œผ๋กœ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ด„ํ˜ธ๊ฐ€ () ์ฒ˜๋Ÿผ ๋ถ™์–ด ์žˆ์œผ๋ฉด ๋ ˆ์ด์ ธ์ด๊ณ , (...) ์ฒ˜๋Ÿผ ์žˆ์œผ๋ฉด ๋ง‰๋Œ€๋‹ค. ๋ ˆ์ด์ ธ๊ฐ€ ๋ง‰๋Œ€๋ฅผ ์ž๋ฅด๋Š”๋ฐ ์ž˜๋ฆฐ ๋ง‰๋Œ€์˜ ๊ฐฏ์ˆ˜๋Š” ์–ผ๋งˆ์ธ๊ฐ€.

๊ทธ๋Ÿผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ธ ๊ฒฝ์šฐ๊ฐ€ ๋‚˜์˜จ๋‹ค.

  • ( ๋ฌธ์ž๋ฅผ ๋งŒ๋‚ฌ์„ ๊ฒฝ์šฐ
  • ) ๋ฌธ์ž๋ฅผ ๋งŒ๋‚ฌ์„ ๊ฒฝ์šฐ
  • ๋ ˆ์ด์ ธ๋ฅผ ๋งŒ๋‚ฌ์„ ๊ฒฝ์šฐ

์ด ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์†Œ์Šค๋งŒ ์งœ์ฃผ๋ฉด ๋!

( ๋ฌธ์ž๋ฅผ ๋งŒ๋‚ฌ์„ ๊ฒฝ์šฐ

์ด ๋•Œ๋Š” ( ๋กœ ์‹œ์ž‘ํ•˜๋Š”๊ฒŒ ๋ง‰๋Œ€์ผ์ง€ ๋ ˆ์ด์ ธ์ผ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋‹จ ์Šคํƒ์— pushํ•˜๊ณ  ๋‹ค์Œ์— ) ๋ฅผ ๋งŒ๋‚˜๋ฉด ํ™•์ธํ•˜๋„๋ก ํ•œ๋‹ค.
Stack.push

๋ ˆ์ด์ ธ๋ฅผ ๋งŒ๋‚ฌ์„ ๊ฒฝ์šฐ

์—ฌ๊ธฐ์„œ ๋ ˆ์ด์ ธ๋ฅผ ๋งŒ๋‚ฌ๋Š”์ง€ ์•„๋‹Œ์ง€ ํŒ๋ณ„์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•œ ์นธ ์•ž์˜ ๋ฌธ์ž๋ฅผ ํ™•์ธํ•ด์„œ ( ๋ฅผ ๋งŒ๋‚ฌ์œผ๋ฉด ๋ ˆ์ด์ ธ๋กœ ๊ฐ„์ฃผํ•˜๊ณ  Stack.pop ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
๋ ˆ์ด์ ธ๋ฅผ ๋งŒ๋‚ฌ๋‹ค๋Š” ์†Œ๋ฆฌ๋Š” ๋ง‰๋Œ€๊ฐ€ ์ž˜๋ ธ๋‹ค๋Š” ์†Œ๋ฆฌ์™€ ๊ฐ™์œผ๋‹ˆ๊นŒ ํ˜„์žฌ ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ( ์ˆ˜ ๋งŒํผ ์ž˜๋ฆฐ ๋ง‰๋Œ€ ํ•ฉ๊ณ„(ans)์— Stack.size()๋งŒํผ ๋”ํ•ด์ค€๋‹ค.

) ๋ฌธ์ž๋ฅผ ๋งŒ๋‚ฌ์„ ๊ฒฝ์šฐ

์ด ๊ฒฝ์šฐ์—๋Š” ๋ฐ”๋กœ Stack.pop ์—ฐ์‚ฐ์œผ๋กœ ์Šคํƒ์„ ์—†์• ์ฃผ๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋ช…์‹ฌํ•ด์•ผ ํ•  ์ ์ด Stack์—์„œ pop์„ ํ•˜์˜€๋‹ค๊ณ  ํ•ด๋„, ์‡ ๋ง‰๋Œ€๊ธฐ์˜ ์ž˜๋ฆฐ ๋ถ€๋ถ„์ด ๋‚จ์•„์žˆ์œผ๋ฏ€๋กœ ์ž˜๋ฆฐ ๋ง‰๋Œ€ ํ•ฉ๊ณ„(ans)์— +1 ์„ ํ•ด์ค€๋‹ค.

์†Œ์Šค ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String stick = br.readLine();
        Stack<Character> stack = new Stack<>();
        int ans = 0;
        for (int i = 0; i < stick.length(); i++) {
            if(stick.charAt(i) == '('){
                stack.push('(');
            }else {
                if(stick.charAt(i-1) == '(') { // ๋ ˆ์ด์ ธ์ธ ๊ฒฝ์šฐ
                    stack.pop();
                    ans += stack.size();
                }else {
                    ans += 1;
                    stack.pop();
                }
            }
        }
        System.out.println(ans);
    }
}

 

๋Œ“๊ธ€