일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 1935
- HumanInterfaceGuidelines
- AppleDeveloperAcademy
- HumanInterfaceGuideline
- 코드트리
- POSTECH
- Xcode
- HIG
- 코딩트리조별과제
- Playground #Swift
- SWiFT
- Algorithm
- Apple
- 백준
- 애플디벨로퍼아카데미
- 코딩테스트
Archives
- Today
- Total
WonniOS
[Swift] 11. 백준 1935번: 후위 표기식2 본문
후위표기식이란 1+2*3이 있다면 123*+ 처럼 연산자를 피연산자 뒤에 써주는 것이다.
후위표기식은 기본적으로 stack을 사용해 계산을 해서 컴퓨터가 더 이해하기 쉽다.
이 문제는 stack을 어떻게 활용할지만 알면 대충 감이 잡히는 문제였다.
문제 링크
https://www.acmicpc.net/problem/1935
1935번: 후위 표기식2
첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이
www.acmicpc.net
풀이
1. 백준에 나온 예제 입력1으로 예시를 들어보면
일단 input을 그대로 받은 다음, 한 단어씩 살펴보면서 연산자가 나올때까지 stack에 push를 해주었다.
(이때, 그냥 push 하는게 아니라 아스키코드를 이용해 index에 접근해서 push해야 한다.)
2. 그러다가 연산자가 나오면 stack의 마지막에 있는 2개를 서로 연산해주고, stack에서 지운다. 이때 연산한 결과 값은 다시 stack으로 push한다.
제출 코드
import Foundation
class B1935 {
func solution() {
let count = Int(readLine()!)!
let input = readLine()!
var num: [Double] = []
var stack: [Double] = []
for _ in 0..<count {
num.append(Double(readLine()!)!)
}
for i in input {
switch i {
case "*":
stack.append(stack.removeLast() * stack.removeLast())
case "+":
stack.append(stack.removeLast() + stack.removeLast())
case "-":
let first = stack.removeLast()
let second = stack.removeLast()
stack.append(second - first)
case "/":
let first = stack.removeLast()
let second = stack.removeLast()
stack.append(second/first)
default:
let index = i.asciiValue! - 65
stack.append(num[Int(index)])
}
}
print(String(format: "%.2f", stack[0]))
}
}
마무리 & 새롭게 알게된 점
아스키 코드를 이용해서 Index에 접근해야한다는 건 떠올리기 좀 어려웠다.
아스키 코드와 친해져봅시다...!
'Algorithm' 카테고리의 다른 글
[Swift] 백준 10820번: 문자열 분석 (0) | 2023.04.07 |
---|---|
[Swift] 백준 10808번: 알파벳 개수 (0) | 2023.04.06 |
[Swift] 10. 백준 17298번: 오큰수 (0) | 2023.04.04 |
[Swift] 9. 백준 10866번: 덱 (0) | 2023.03.08 |
[Swift] 8. 백준 1158번: 요세푸스 문제 (0) | 2023.03.07 |