μ½”λ”©ν…ŒμŠ€νŠΈ

[μŠ€νƒ] 4. ν›„μœ„μ‹ 계산

μ‹œνλ¦¬ν‹°μ§€ν˜Έ 2024. 1. 10. 23:04
4. ν›„μœ„μ‹ μ—°μ‚°(postfix)
 

μ„€λͺ…

ν›„μœ„μ—°μ‚°μ‹μ΄ μ£Όμ–΄μ§€λ©΄ μ—°μ‚°ν•œ κ²°κ³Όλ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ„Έμš”.

λ§Œμ•½ 3*(5+2)-9 을 ν›„μœ„μ—°μ‚°μ‹μœΌλ‘œ ν‘œν˜„ν•˜λ©΄ 352+*9- 둜 ν‘œν˜„λ˜λ©° κ·Έ κ²°κ³ΌλŠ” 12μž…λ‹ˆλ‹€.

μž…λ ₯

첫 쀄에 ν›„μœ„μ—°μ‚°μ‹μ΄ μ£Όμ–΄μ§‘λ‹ˆλ‹€. μ—°μ‚°μ‹μ˜ κΈΈμ΄λŠ” 50을 λ„˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

식은 1~9의 μˆ«μžμ™€ +, -, *, / μ—°μ‚°μžλ‘œλ§Œ 이루어진닀.

좜λ ₯

μ—°μ‚°ν•œ κ²°κ³Όλ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ μž…λ ₯ 1 

352+*9-

μ˜ˆμ‹œ 좜λ ₯ 1

12

 

<<풀이>>

 

import java.util.Scanner;
import java.util.Stack;

class Main {
    private int solution(String str) {
        Stack<Integer> stack = new Stack<>();
        for (char x : str.toCharArray()) {
            if (Character.isDigit(x)) stack.push(x - 48);
            else {
                int rt = stack.pop();
                int lt = stack.pop();
                if (x == '+') stack.push(lt + rt);
                else if (x == '-') stack.push(lt - rt);
                else if (x == '*') stack.push(lt * rt);
                else if (x == '/') stack.push(lt / rt);
            }

        }
        return stack.get(0);
    }


    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        String str = in.next();
        System.out.println(T.solution(str));
    }
}

 

이 λ¬Έμ œλŠ” ν›„μœ„μ‹ 연산이라고 ν•΄μ„œ μ›λž˜ μ€‘μœ„μ‹ 연산이 λ””ν΄νŠΈμ΄λ©΄ ν›„μœ„μ‹μ€ μ—°μ‚°κΈ°ν˜Έλ₯Ό κ³„μ‚°ν•˜λŠ” 숫자의 λ§ˆμ§€λ§‰μ— λ‘”λ‹€.

 

풀이방식

μš°μ„ , toCharArrayλ₯Ό ν™œμš©ν•΄μ„œ 숫자이면 stack에 λ‹΄μ•„μ€€λ‹€. κ·ΈλŸ¬λ‹€κ°€ μ—°μ‚°μžλ₯Όλ§Œλ‚˜κ²Œ 되면 pushλ₯Ό 톡해 λ¨Όμ € λ‚˜μ˜€λŠ” 값은 였λ₯Έμͺ½μ— μžˆλ‹€κ³  ν•΄μ„œ rt에 λ„£μ–΄μ£Όκ³  κ·Έ λ‹€μŒ 값은 lt에 λ„£μ–΄μ€€λ‹€. κ·Έλ ‡κ²Œ ν•΄μ„œ if 문으둜 κ·Έ μ—°μ‚°μžμ˜ 쑰건에 맞게 κ΅¬ν•˜κ³  λ‹€μ‹œ stack에 λ„£μ–΄μ€€λ‹€.

 

μ΄λŸ°μ‹μœΌλ‘œ λ°˜λ³΅ν•΄μ„œ 문제λ₯Ό ν‘ΈλŠ” λ¬Έμ œμ΄λ‹€. !! 

 

μ—¬κΈ°μ„œ pop을 두 번 해버리면 μ•ˆ λ˜μ§€ μ•Šλ‚˜!? stack 에 값이 μ—†μœΌλ©΄ μ–΄λ–»κ²Œ ?? 라고 생각할 μˆ˜λ„ μžˆμ§€λ§Œ 사싀상 μ—°μ‚°ν•˜κΈ° μœ„ν•΄μ„œλŠ” 무쑰건 두 개의 ν”Όμ—°μ‚°μžκ°€ λ“€μ–΄κ°€κΈ° λ§ˆλ ¨μ΄λ‹€. κ·Έλ ‡κ²Œ μƒκ°ν•˜λ©΄ λ„£μ–΄μ€€ λ¬Έμžμ—΄μ΄ μ€‘μœ„μ‹μ„ ν›„μœ„μ‹μœΌλ‘œ λ§Œλ“€μ—ˆκΈ°μ—, μ΄λŸ¬ν•œ ν’€μ΄λŠ” λ¬Έμ œκ°€ μ—†λ‹€λŠ” 것이닀.

 

처음 λ³΄λŠ” ν˜•νƒœμ˜€κ³  μ΄λŸ¬ν•œ 방식이 λ‚˜μ˜€λ©΄ 이 λ…Όλ¦¬μ˜ 흐름을 κΉŒλ¨Ήμ§€ 말고 μ‚¬μš©ν•˜μž!!

 

<<μΆ”κ°€ 곡뢀>>

 

'0' '1' 같은 charλŠ” μ•„μŠ€ν‚€μ½”λ“œλ‘œ ν–ˆμ„ λ•Œ '0'->48 이고 '1' -> 49 이닀. λ”°λΌμ„œ 이λ₯Ό μ§„μ§œ 숫자둜 λ°”κΎΈκΈ° μœ„ν•΄μ„œλŠ” -48 을 ν•˜λ©΄ λœλ‹€!