๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 1935_ํ›„์œ„ ํ‘œ๊ธฐ์‹2

๋ฟŒ์•ผ._. 2021. 10. 4. 00:36

Silver III

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/1935)

<ํ›„์œ„ ํ‘œ๊ธฐ์‹ 2>

๋ฌธ์ œ 

 

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

 

์ž…๋ ฅ

 

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

 

์ถœ๋ ฅ 

 

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

 

 

๋ฌธ์ œ ํ’€์ด

   - my solution

import sys

if __name__=='__main__':
    n=int(sys.stdin.readline().strip()) # ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐœ์ˆ˜

    line=sys.stdin.readline().strip() # ํ›„์œ„ ํ‘œ๊ธฐ์‹
    num=[] #  ํ”ผ์—ฐ์‚ฐ์ž ๋Œ€์‘ํ•˜๋Š” ๊ฐ’ ๋„ฃ์„ ๋ฐฐ์—ด
    dict = {'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4, 'F': 5, 'G': 6, 'H': 7, 'I': 8,'J': 9,
            'K': 10, 'L': 11, 'M': 12,'N': 13, 'O': 14, 'P': 15, 'Q': 16, 
            'R': 17, 'S': 18, 'T': 19, 'U': 20, 'V': 21, 'W': 22, 'X': 23, 'Y': 24,
            'Z': 25} # ํ”ผ์—ฐ์‚ฐ์ž_index match

    for i in range(n): # ํ”ผ์—ฐ์‚ฐ์ž ๋Œ€์‘ํ•˜๋Š” ๊ฐ’
        num.append(int(sys.stdin.readline().strip()))

    arr=[] # ์ˆ˜์‹
    for i in line:
        if i.isalpha(): # ์˜๋Œ€๋ฌธ์ž๋ฉด ์ˆซ์ž๋กœ ๋ฐ”๊ฟ” ๋„ฃ์Œ
            arr.append(num[dict[i]])
        else: # ์—ฐ์‚ฐ์ž
            b=arr.pop()
            a=arr.pop()
            if i=='+': # ๋”ํ•˜๊ธฐ
                arr.append(a+b)
            elif i=='-': # ๋นผ๊ธฐ
                arr.append(a-b)
            elif i=='*': # ๊ณฑํ•˜๊ธฐ
                arr.append(a*b)
            elif i=='/': # ๋‚˜๋ˆ„๊ธฐ
                arr.append(a/b)

    print("{:.2f}".format(arr[-1])) # ์†Œ์ˆซ์  ๋‘˜์งธ ์ž๋ฆฌ๊นŒ์ง€ ์ถœ๋ ฅ

 

์˜๋Œ€๋ฌธ์ž๋กœ ์ฃผ์–ด์ง€๋Š” ํ”ผ์—ฐ์‚ฐ์ž์™€ ํ”ผ์—ฐ์‚ฐ์ž์— ๋Œ€์‘ํ•˜๋Š” ๊ฐ’์„ matching๋งŒ ์ž˜ ์‹œ์ผœ์ค€๋‹ค๋ฉด ์–ด๋ ค์šธ ๊ฒƒ์ด ์—†์–ด ๋ณด์ด๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

  • A~Z๋ฅผ dict๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ˆซ์ž์™€ key, value๋กœ ์„ ์–ธํ•˜์˜€๋‹ค. ์—ฌ๊ธฐ์„œ ์ˆซ์ž๋Š” num ๋ฐฐ์—ด์˜ index๋กœ ํ™œ์šฉ๋  ๊ฒƒ์ด๋‹ค. ํ”ผ์—ฐ์‚ฐ์ž ๋Œ€์‘ํ•˜๋Š” ๊ฐ’์ด A๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ๋“ค์–ด์˜ค๋ฏ€๋กœ num์— ์ €์žฅํ•ด๋‘๋ฉด, dict์˜ key์— ํ•ด๋‹นํ•˜๋Š” value๋ฅผ ํ†ตํ•ด์„œ ๋‚˜์ค‘์— ๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

1) ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐœ์ˆ˜, ํ›„์œ„ ํ‘œ๊ธฐ์‹, ํ”ผ์—ฐ์‚ฐ์ž ๋Œ€์‘ํ•˜๋Š” ๊ฐ’ ์ž…๋ ฅ

2) stack์„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด arr ์„ ์–ธ

  2-1) ์˜๋Œ€๋ฌธ์ž์ด๋ฉด ์ˆซ์ž๋กœ ๋ฐ”๊ฟ” ๋„ฃ์Œ

  2-2) ์—ฐ์‚ฐ์ž์ด๋ฉด pop์„ ํ™œ์šฉํ•˜์—ฌ arr์—์„œ 2๊ฐœ์˜ ๊ฐ’์„ ๊บผ๋‚ธ ํ›„ ์—ฐ์‚ฐ

        -> ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ„ ๊ฒƒ์ด ๋จผ์ € pop ๋˜๋ฏ€๋กœ ๋จผ์ € ๋‚˜์˜จ ๊ฒƒ์„ b๋ผ ํ•จ

3) format์„ ํ™œ์šฉํ•˜์—ฌ ์†Œ์ˆซ์  ๋‘˜์งธ ์ž๋ฆฌ๊นŒ์ง€ ์ถœ๋ ฅ


์ƒ๊ฐ๐Ÿค”

 

ํ”ผ์—ฐ์‚ฐ์ž A~Z์™€ ํ”ผ์—ฐ์‚ฐ์ž์— ๋Œ€์‘ํ•˜๋Š” ๊ฐ’์„ matching ์‹œํ‚ค๋Š” ๊ฒƒ๊ณผ ํ›„์œ„ ์—ฐ์‚ฐ์˜ ๊ฐœ๋…์„

์ดํ•ดํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค.