티스토리 뷰
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/67257
💡 구현 아이디어
- 수식을 분리
- 우선순위 정보와 수식을 전달
- 계산진행
- 결과 반환
💻 코드
import Foundation
func solution(_ expression:String) -> Int64 {
var result: Int64 = 0
// 수식 배열
let expression = inputToArr(expression)
// 연산자의 우선순위 (+, -, *) 3! = 6(가지 경우) - 앞에서 부터 먼저 계산
let priorityInfos: [[String]] = [
["+", "-", "*"],
["+", "*", "-"],
["-", "+", "*"],
["-", "*", "+"],
["*", "+", "-"],
["*", "-", "+"]
]
for info in priorityInfos {
let number: Int64 = calculate(
expression: expression,
priority: info
)
result = max(result, number)
}
return result
}
// 수식과 우선순위를 전달하면 결과값(절대값)을 반환
func calculate(expression: [String], priority: [String]) -> Int64 {
var expression = expression
for oper in priority {
var stack: [String] = []
var idx: Int = 0
while idx < expression.count {
if expression[idx] == oper {
let num1: String = stack.popLast()!
let num2: String = expression[idx+1]
var num3: Int64 = 0
if oper == "+" { num3 = Int64(num1)! + Int64(num2)! }
else if oper == "-" { num3 = Int64(num1)! - Int64(num2)! }
else if oper == "*" { num3 = Int64(num1)! * Int64(num2)! }
stack.append(String(num3))
idx += 1
} else {
stack.append(expression[idx])
}
idx += 1
}
expression = stack
}
let result = Int64(expression[0])!
return result < 0 ? -result : result
}
// 입력된 String을 배열에 담아서 반환
func inputToArr(_ expression: String) -> [String] {
var result: [String] = []
var flag: Bool = true // 이전이 연산자였는가
for char in expression {
let str = String(char)
if str == "+" || str == "-" || str == "*" {
result.append(str)
flag = true
} else {
if flag {
result.append(str)
} else {
result[result.count-1] += str
}
flag = false
}
}
return result
}
❌ 틀린 이유 및 틀린 부분
⏳ 시간 복잡도
O(N) = 우선순위 케이스 6개 * 연산자 수 3개 * 최대 연산자, 숫자의 개수 100 = 약 2만번
📌 풀이 또는 기억할 정보
- 연산자 정보를 enum으로 구성할 수 있음 (깔끔하게 코드 구성가능)
'PS > 문제 풀이' 카테고리의 다른 글
| [프로그래머스/Swift] 169199번 - 리코쳇 로봇 (0) | 2025.04.07 |
|---|---|
| [프로그래머스/Swift] 154540번 - 무인도 여행 (2) | 2025.04.06 |
| [프로그래머스/Swift] 17683번 - 방금그곡 (0) | 2025.04.04 |
| [프로그래머스/Swift] 12952번 - N-Queen (0) | 2025.04.03 |
| [프로그래머스/Swift] 60058번 - 괄호 변환 (1) | 2025.04.02 |
