๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โŒจ๏ธ Language/swift

[Swift] ๋ฐฑ์ค€ 1935๋ฒˆ - ํ›„์œ„ ํ‘œ๊ธฐ์‹2

by hyebin (Helia) 2023. 3. 23.
๋ฐ˜์‘ํ˜•
๋ฐฑ์ค€ ๋ฌธ์ œ ๋ชจ์Œ

๋ฌธ์ œ ๋งํฌ

https://www.acmicpc.net/problem/1935

 

1935๋ฒˆ: ํ›„์œ„ ํ‘œ๊ธฐ์‹2

์ฒซ์งธ ์ค„์— ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐœ์ˆ˜(1 ≤ N ≤ 26) ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‘˜์งธ ์ค„์—๋Š” ํ›„์œ„ ํ‘œ๊ธฐ์‹์ด ์ฃผ์–ด์ง„๋‹ค. (์—ฌ๊ธฐ์„œ ํ”ผ์—ฐ์‚ฐ์ž๋Š” A~Z์˜ ์˜๋Œ€๋ฌธ์ž์ด๋ฉฐ, A๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ N๊ฐœ์˜ ์˜๋Œ€๋ฌธ์ž๋งŒ์ด ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ธธ์ด

www.acmicpc.net

 

๋ฌธ์ œ

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

์ž…๋ ฅ

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

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

์ถœ๋ ฅ

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

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜

  • ์ž๋ฃŒ ๊ตฌ์กฐ
  • ์Šคํƒ

๋ฌธ์ œ ํ’€์ด

  • ํ›„์œ„ํ‘œ๊ธฐ์‹์ด๋ž€ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ๋จผ์ € ์“ฐ์ด๊ณ , ๊ทธ ๋’ค๋กœ ์—ฐ์‚ฐ์ž๊ฐ€ ๋‚˜์˜ค๋Š” ํ‘œ๊ธฐ์‹์ด๋‹ค.
    • ex) 4*(7+2) => 4 7 2 + *
  • ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐœ์ˆ˜ n๊ณผ ํ›„์œ„ํ‘œ๊ธฐ์‹ input๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
  • ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋‹ด์„ Doubleํ˜• ๋ฐฐ์—ด stack๊ณผ ๊ฐ ํ”ผ์—ฐ์‚ฐ์ž์— ๋Œ€์‘ํ•˜๋Š” ๊ฐ’์„ ๋ฐ›์„ Doubleํ˜• ๋ฐฐ์—ด arr๋ฅผ ์„ ์–ธํ•œ๋‹ค.
  • 0๋ถ€ํ„ฐ n๊นŒ์ง€ arr์— ํ”ผ์—ฐ์‚ฐ์ž์— ๋Œ€์‘ํ•˜๋Š” ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
  • ์ž…๋ ฅ๋ฐ›์€ ํ›„์œ„ํ‘œ๊ธฐ์‹์„ switch๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์š”์†Œ์— ํ•ด๋‹นํ•˜๋Š” ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
    • + ๋ผ๋ฉด ๋งˆ์ง€๋ง‰ ์š”์†Œ 2๊ฐœ๋ฅผ ๋”ํ•˜๊ณ , - ๋ผ๋ฉด ๋งˆ์ง€๋ง‰์—์„œ 2๋ฒˆ์งธ ์š”์†Œ์—์„œ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ๋บ€๋‹ค.
    • * ๋ผ๋ฉด ๋งˆ์ง€๋ง‰ ์š”์†Œ 2๊ฐœ๋ฅผ ๊ณฑํ•˜๊ณ , / ๋ผ๋ฉด ๋งˆ์ง€๋ง‰์—์„œ 2๋ฒˆ์งธ ์š”์†Œ์—์„œ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ๋‚˜๋ˆˆ๋‹ค.
    • ์—ฐ์‚ฐ์ž๊ฐ€ ์•„๋‹ˆ๊ณ  ํ”ผ์—ฐ์‚ฐ์ž ๋ผ๋ฉด, index์— ํ˜„์žฌ ํ”ผ์—ฐ์‚ฐ์ž์˜ ์•„์Šคํ‚ค์ฝ”๋“œ ๊ฐ’์—์„œ 65๋ฅผ ๋นผ์„œ ์ €์žฅํ•œ๋‹ค. (A=0... Z=25)
      • ์ดํ›„ stack์— arr์˜ index๋ฒˆ ์งธ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
        • A๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ๋Œ€์‘๋˜๋Š” ๊ฐ’์„ stack์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋„๋ก index๋Š” ์•„์Šคํ‚ค์ฝ”๋“œ๊ฐ’์—์„œ 65๋ฅผ ๋นผ์„œ ์‚ฌ์šฉํ•œ๋‹ค.
        • ex) A B A + +, A=1 B=2์ธ ๊ฒฝ์šฐ arr = [1, 2]๊ฐ€ ์ €์žฅ๋œ๋‹ค. ๊ณ„์‚ฐ์€ 1+2+1์ด๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค๋ฅผ ๊ฐ ์•ŒํŒŒ๋ฒณ์— ๋Œ€์‘๋  ์ˆ˜ ์žˆ๋„๋ก ์•„์Šคํ‚ค์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์‚ฐํ•œ๋‹ค.

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

import Foundation

let n = Int(readLine()!)!
let input = readLine()!.map{$0}
var stack = [Double]()
var arr = [Double]()

for _ in 0..<n {
    arr.append(Double(readLine()!)!)
}

for i in input {
    switch i {
    case "+":
        stack.append(stack.removeLast() + stack.removeLast())
    case "-":
        let f = stack.removeLast()
        stack.append(stack.removeLast() - f)
    case "*":
        stack.append(stack.removeLast() * stack.removeLast())
    case "/":
        let f = stack.removeLast()
        stack.append(stack.removeLast() / f)
    default:
        let index = i.asciiValue! - 65
        stack.append(arr[Int(index)])
    }
}
print(String(format: "%.2f", stack[0]))
๋ฐ˜์‘ํ˜•