Algorithm๐Ÿฅ‡

1935.ํ›„์œ„ ํ‘œ๊ธฐ์‹2

hae02y 2023. 10. 16. 08:24
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

ํ›„์œ„ ํ‘œ๊ธฐ์‹๊ณผ ๊ฐ ํ”ผ์—ฐ์‚ฐ์ž์— ๋Œ€์‘ํ•˜๋Š” ๊ฐ’๋“ค์ด ์ฃผ์–ด์ ธ ์žˆ์„ ๋•Œ, ๊ทธ ์‹์„ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐœ์ˆ˜(1 โ‰ค N โ‰ค 26) ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‘˜์งธ ์ค„์—๋Š” ํ›„์œ„ ํ‘œ๊ธฐ์‹์ด ์ฃผ์–ด์ง„๋‹ค. (์—ฌ๊ธฐ์„œ ํ”ผ์—ฐ์‚ฐ์ž๋Š” A~Z์˜ ์˜๋Œ€๋ฌธ์ž์ด๋ฉฐ, A๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ N๊ฐœ์˜ ์˜๋Œ€๋ฌธ์ž๋งŒ์ด ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ธธ์ด๋Š” 100์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค) ๊ทธ๋ฆฌ๊ณ  ์…‹์งธ ์ค„๋ถ€ํ„ฐ N+2๋ฒˆ์งธ ์ค„๊นŒ์ง€๋Š” ๊ฐ ํ”ผ์—ฐ์‚ฐ์ž์— ๋Œ€์‘ํ•˜๋Š” ๊ฐ’์ด ์ฃผ์–ด์ง„๋‹ค. 3๋ฒˆ์งธ ์ค„์—๋Š” A์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’, 4๋ฒˆ์งธ ์ค„์—๋Š” B์— ํ•ด๋‹นํ•˜๋Š”๊ฐ’ , 5๋ฒˆ์งธ ์ค„์—๋Š” C ...์ด ์ฃผ์–ด์ง„๋‹ค, ๊ทธ๋ฆฌ๊ณ  ํ”ผ์—ฐ์‚ฐ์ž์— ๋Œ€์‘ ํ•˜๋Š” ๊ฐ’์€ 100๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

ํ›„์œ„ ํ‘œ๊ธฐ์‹์„ ์•ž์—์„œ๋ถ€ํ„ฐ ๊ณ„์‚ฐํ–ˆ์„ ๋•Œ, ์‹์˜ ๊ฒฐ๊ณผ์™€ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๊ฐ€ -20์–ต๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 20์–ต๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž…๋ ฅ๋งŒ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์†Œ์ˆซ์  ๋‘˜์งธ ์ž๋ฆฌ๊นŒ์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ œ์ถœ ์ •๋‹ต ๋งžํžŒ ์‚ฌ๋žŒ ์ •๋‹ต ๋น„์œจ
2 ์ดˆ 128 MB 22787 11044 8864 48.258%
https://www.acmicpc.net/problem/1935

ํ’€์ด

ํ›„์œ„ํ‘œ๊ธฐ์‹์˜ ์žฅ์ 

์ผ๋ฐ˜์ ์œผ๋กœ ์ต์ˆ™ํ•˜์ง€ ์•Š์•„์„œ ๊ทธ๋ ‡์ง€, ์ค‘์œ„ํ‘œ๊ธฐ์‹๋ณด๋‹ค ํ›„์œ„ํ‘œ๊ธฐ์‹์€ ๊ด„ํ˜ธ๋‚˜ ์‚ฌ์น™์—ฐ์‚ฐ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ƒ๊ฐํ•˜์ง€ ์•Š์•„ ํ›จ์”ฌ ์ง๊ด€์ ์ด๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด, ์ค‘์œ„ํ‘œ๊ธฐ์‹์—์„œ ==47+2==๋ผ๋Š” ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•  ๋•Œ, 7+2๋ฅผ ๋จผ์ € ์—ฐ์‚ฐํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ๊ด„ํ˜ธ๋ฅผ ํ•„์—ฐ์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ==4(7+2)== ํ•˜์ง€๋งŒ ํ›„์œ„ํ‘œ๊ธฐ์‹์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค๋ฉด ==4 7 2 + *== ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜์žˆ๋‹ค.

ํ›„์œ„ํ‘œ๊ธฐ์‹ ์ฝ๋Š” ๋ฒ•

์™ผ์ชฝ์—์„œ ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฝ๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค. ํ”ผ์—ฐ์‚ฐ์ž(์ˆซ์ž)๋Š” ์ผ๋‹จ ์ง€๋‚˜์น˜๊ณ , ์—ฐ์‚ฐ์ž(+-*/)๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋˜๋ฉด, ์—ฐ์‚ฐ์ž ์•ž์ชฝ ๋‘ ๊ฐœ์˜ ์ˆซ์ž๋กœ ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•œ๋‹ค.

  • ์˜ˆ์ œ) ==4 7 2 + *==
  1. ์™ผ์ชฝ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฝ์œผ๋ฉด์„œ ์—ฐ์‚ฐ์ž๋ฅผ ์ฐพ๋Š”๋‹ค.
  2. +์—ฐ์‚ฐ์ž๋ฅผ ์ฐพ์•˜๋‹ค. +์—ฐ์‚ฐ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์•ž์ชฝ ๋‘๊ฐœ์˜ ํ”ผ์—ฐ์‚ฐ์ž 7, 2 ๋ฅผ ๋”ํ•œ๋‹ค.
  3. ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•˜๊ณ  ๋‚˜๋ฉด ์—ฐ์‚ฐ๋œ ๊ฐ’์„ ์ ์–ด๋‘”๋‹ค. ==4 9 *==
  4. ๋‹ค์‹œ ์ˆœ์ฐจ์ ์œผ๋กœ ์—ฐ์‚ฐ์ž๋ฅผ ์ฐพ๋Š”๋‹ค.
  5. *์—ฐ์‚ฐ์ž๋ฅผ ์ฐพ์•˜๋‹ค. ์•ž์ชฝ ๋‘๊ฐœ์˜ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•œ๋‹ค.
  6. ์—ฐ์‚ฐ๊ฒฐ๊ณผ๋Š” ==36==

์ฝ”๋“œ

public class ํ›„์œ„ํ‘œ๊ธฐ์‹2 {  

    //switch๋ฌธ ํ™œ์šฉ?  
    //๋ฐฐ์—ด๋กœ ์ˆซ์ž๋ฅผ ๋„ฃ๊ณ   
    //์Šคํƒ์—๋Š” ์ธ๋ฑ์Šค๋งŒ ์ €์žฅ  

    public static void main(String[] args) throws IOException {  

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
        int N = Integer.parseInt(br.readLine());  

        Stack<Double> stack = new Stack<>();  

        String str = br.readLine();  

        double[] arr = new double[N];  

        for (int i = 0; i < N; i++) {  
            arr[i] = Double.parseDouble(br.readLine());  
        }  

        double result = 0;  

        for (int i = 0; i < str.length(); i++) {  
            if ('A' <= str.charAt(i) && str.charAt(i) <= 'Z') {  
                stack.push(arr[str.charAt(i) - 'A']);  // ํ•ต์‹ฌ ์ฝ”๋“œ  
            } else {  
                if (!stack.isEmpty()) {  
                    double a = stack.pop();  
                    double b = stack.pop();  

                    switch (str.charAt(i)) {  
                        case '+':  
                            result = b + a;  
                            stack.push(result);  
                            continue;  
                        case '-':  
                            result = b - a;  
                            stack.push(result);  
                            continue;  
                        case '*':  
                            result = b * a;  
                            stack.push(result);  
                            continue;  
                        case '/':  
                            result = b/ a;  
                            stack.push(result);  
                            continue;  
                    }  
                }  
            }  
        }  

        System.out.printf("%.2f", stack.pop());  

        br.close();  
    }  
}
๋ฐ˜์‘ํ˜•