[BOJ] 1935 - 후위 표기식2

2022. 5. 18. 12:11·알고리즘/Swift

문제

 

풀이 코드

import Foundation

let N = Int(readLine()!)!
let formula = readLine()!
var num = [Int]()
var answer = [Double]()

for _ in 0..<N {
    num.append(Int(readLine()!)!)
}

for op in formula {
    switch op {
    case "*":
        answer.append(answer.removeLast() * answer.removeLast())
    case "/":
        let stackLast = answer.removeLast()
        answer.append(answer.removeLast() / stackLast)
    case "+":
        answer.append(answer.removeLast() + answer.removeLast())
    case "-":
        let stackLast = answer.removeLast()
        answer.append(answer.removeLast() - stackLast)
    default:
        let idx = op.asciiValue! - 65
        answer.append(Double(num[Int(idx)]))
    }
}

print(String(format: "%.2f", answer.removeLast()))

 

풀이 과정

알파벳을 포함한 별도의 배열을 선언해 주고 계산을 해야하나 고민했는데,

Ascii 코드를 이용해서 인덱스를 할당하여 구현하면 된다고 생각했다.

 

A 의 아스키 코드는 65 이고, 입력받은 숫자들을 별도의 배열로 지정하여

A 일때는 0인덱스의 수를, B일때는 1인덱스의 수를 ... 이렇게 할당하면 될것같았다.

 

그렇게 그냥 스택을 이용해 풀이를 해주었고, 고려해야 할 점은 두가지였다.

- 와 / 인데,

 

덧셈과 곱셈의 경우 순서가 상관 없지만, 뺄셈과 나눗셈은 순서가 중요하기 때문에, 먼저 removeLast 를 수행하여 순서를 지정해 주었다.

 

이렇게 풀고 소숫점 2번째 자리까지만 출력하기 위해

String의 format 을 이용해 C언어의 printf 처럼 할당해 주었다

'알고리즘/Swift' 카테고리의 다른 글
  • [BOJ] 2164 - 카드2
  • [BOJ] 1918 - 후위 표기식
  • [BOJ] 17299 - 오등큰수
  • [BOJ] 17298 - 오큰수
Jeohong
Jeohong
기억 보단 기록을
  • Jeohong
    Chikong Devlog
    Jeohong
  • 전체
    오늘
    어제
    • 분류 전체보기 (186)
      • ---- 개발 컨텐츠 ---- (0)
      • iOS (30)
        • Swift 문법 (1)
        • iOS 개념 (12)
        • HIG (5)
        • SwiftUI (7)
        • UIKit (4)
      • Side Project (0)
      • 개발서적 (4)
        • 객체지향 사실과 오해 (4)
      • 알고리즘 (74)
        • 자료구조 개념 (2)
        • Swift (25)
        • JavaScript (47)
      • ---- 회고 계획 컨텐츠 ---- (0)
      • 계획 및 일기 (10)
      • 회고록 (1)
      • 컨퍼런스 탐방 (1)
      • 미드로 영린이 탈출하기 (1)
      • ---- Previous content ---- (0)
      • Frontend (2)
        • HTML & CSS (2)
      • KITRI 수업 (17)
        • 리눅스 (14)
        • 네트워크 (2)
      • 42seoul (17)
        • Bonr2code (9)
        • 넋두리 (7)
        • 멘토특강 (1)
      • 해킹 실습 (20)
        • 해커스쿨 - F.T.Z (19)
        • WebGoat (1)
      • Tensorflow로 시작하는 NLP (1)
        • 예제 (1)
      • 자연어처리 입문 (1)
        • 이론 (1)
      • 텐서플로로 배우는 딥러닝 (7)
        • 이론 (2)
        • 예제 (5)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩
    boj
    swift
    javascript
    42서울
    SwiftUI
    42seoul
    1서클
    자료구조
    라피신
    스위프트
    개발자
    hig
    본과정
    알고리즘
    백준
    IOS
    Algorithm
    프로그래머스
    네트워크
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Jeohong
[BOJ] 1935 - 후위 표기식2
상단으로

티스토리툴바