๋ฐฑ์ค ๋ฌธ์ ๋ชจ์
๋ฌธ์ ๋งํฌ
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์ด๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ ๊ฐ ์ํ๋ฒณ์ ๋์๋ ์ ์๋๋ก ์์คํค์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ์ฐํ๋ค.
- ์ดํ stack์ arr์ index๋ฒ ์งธ ์์๋ฅผ ์ถ๊ฐํ๋ค.
์์ค์ฝ๋
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]))
'โจ๏ธ Language > swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ๋ฐฑ์ค 10808๋ฒ - ์ํ๋ฒณ ๊ฐ์ (0) | 2023.03.25 |
---|---|
[Swift] ๋ฐฑ์ค 1966๋ฒ - ํ๋ฆฐํฐ ํ (0) | 2023.03.24 |
[Swift] ๋ฐฑ์ค 10866๋ฒ - ๋ฑ (0) | 2023.03.21 |
[Swift] ๋ฐฑ์ค 2164๋ฒ - ์นด๋2 (0) | 2023.03.21 |
[Swift] ๋ฐฑ์ค 1158๋ฒ - ์์ธํธ์ค ๋ฌธ์ (0) | 2023.03.20 |