๐ ๋ฌธ์ ๋งํฌ
https://school.programmers.co.kr/learn/courses/30/lessons/67257
๐ ๋์ ํ์ด
์ฐ์ ์์๋ฅผ ๋ถ์ฌํ๊ณ , ๊ทธ์ ๋ฐ๋ฅธ ์ฐ์ฐ์ ํ๊ณ ,, ๋ณต์กํด ๋ณด์ด์ง๋ง ์ดํด๋ง ํ๋ฉด ๋จ์ํ ๋ฌธ์ ์๋ค.
์ฐ์ ๋๋ ์ฃผ์ด์ง expression์ '์ซ์'์ '์ฐ์ฐ์'๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์ ๋ง๋ค์ด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค. ์ด ๋ถ๋ถ์์ ์ด๋ป๊ฒ ๋ฐ๊พธ๋ฉด ์ข์์ง ์๊ฐํ๋ค๊ฐ ์ข์ ์ฝ๋๋ฅผ ๋ฐ๊ฒฌํด์ ์กฐ๊ธ ์ฐธ๊ณ ํ๋ค.
let num = "1234"
if num.isNumber {
print(true)
}
isNumber ์ด๋ผ๋ ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ฉด, ํด๋น ๋ฌธ์๊ฐ ์ซ์์ธ์ง ํ๋จํ์ฌ Bool๊ฐ์ผ๋ก ๋ฆฌํดํ๋ค. ์ด ๊ฒ์ ์ด์ฉํด์ expression์ ์๋ 'ํ ๋ฌธ์'์ฉ๊บผ๋ด์ด number๋ฉด, num์ ์ฐจ๊ณก์ฐจ๊ณก ์์์ฃผ๊ณ , ์๋๋ผ๋ฉด ์ฐ์ฐ์์ด๋ฏ๋ก ์ง๊ธ๊น์ง ์์ธ num์ ๋ฐฐ์ด์ ๋ฃ์ด์ฃผ๊ณ ์ฐ์ฐ์๊น์ง ๋ฃ์ด์ฃผ๋ ํ์์ผ๋ก ์งํํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ด์ ์ด๋ป๊ฒ ์ด ๋ฐฐ์ด์ ์ฐ์ฐํ ๊ฒ์ธ๊ฐ ์๊ฐํด์ผํ๋ค.
["100", "-", "200", "*", "300", "-", "500", "+", "20"]
์ด๋ฐ ๋ฐฐ์ด์์ '์ฐ์ฐ์'๋ฅผ ๊ธฐ์ค์ผ๋ก ์๋ค ์ซ์๋ฅผ ๊ณ์ฐํ๋ค. ์๋์ ๊ฐ์ด ์๊ฐํ ์ ์๋ค.
๊ทธ๋์ ๊ฐ operation ๋ง๋ค ๊ณ์ฐ๋ result๋ฅผ remove ์ธ๋ฒ์ ํตํด ๊ธฐ์กด๊ฐ์ผ ์ญ์ ํ๊ณ , ํ๋ฒ append ํด์ฃผ์ด์ newArr๋ฅผ ๊ฐฑ์ ํด ๋๊ฐ๋ค.
๋ ์์ธํ๊ฑฐ๋ ์์ธํ ๊ฒ์ ์ฝ๋ ๋ด๋ถ ์ฃผ์์ผ๋ก ๋ฌ์๋์๋ค.
๐ ์ ๋ต์ฝ๋
//
// main.swift
// Algorithm
//
// Created by LeeJiSoo on 2022/09/01.
//
import Foundation
let expression = "100-200*300-500+20"
// result = 60420
func solution(_ expression:String) -> Int {
// ์ต์ข
๋ฆฌํดํ result
var resultList = [Int]()
// input์ List๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ
var num = ""
var arr = [String]()
expression.forEach { char in
if char.isNumber {
num += String(char)
} else {
arr.append(num) // ์ง๊ธ๊น์ง ์์๋จ๋ ์ซ์ ์ถ๊ฐ
arr.append(String(char)) // ์ฐ์ฐ์ ์ถ๊ฐ
num = "" //num ์ด๊ธฐํ
}
}
arr.append(num) // ๋ง์ง๋ง ์ซ์ ๋ฃ์ด์ค์ผํด (์ด๊ฑฐ๋๋ฌธ์ ์๊ฐ ๊ฐ์ก์๋จน์๋ค)
print(arr)
// ์ฐ์ฐ์
let operatorList = [["+", "-", "*"], ["+", "*", "-"],
["-", "+", "*"], ["-", "*", "+"],
["*", "-", "+"], ["*", "+", "-"]]
var newArr = arr
operatorList.forEach { operators in
// newArr์ 1๊ฐ๋ง ๋จ์๋๊น์ง -> ์ฐ์ฐํ๋ฉด ๊ฒฐ๊ตญ ํ๋์ ๊ฒฐ๊ณผ๋ง ๋จ์ผ๋๊น
while newArr.count > 1 {
operators.forEach { op in
while newArr.contains(op) { // ์ฐ์ฐ์ ์๋๋๋ก ๊ณ์ฐํด์ผํ๋๊น while๋ฌธ
let i = newArr.firstIndex(of: String(op))! // op ์ธ๋ฑ์ค ๋ฒํธ ์ฐพ์
var result = 0
if op == "+" {
result = Int(newArr[i-1])! + Int(newArr[i+1])!
} else if op == "-" {
result = Int(newArr[i-1])! - Int(newArr[i+1])!
} else if op == "*" {
result = Int(newArr[i-1])! * Int(newArr[i+1])!
}
// ์ฐ์ฐ์์ ์๋ค ์ซ์ ์ง์์ฃผ๊ณ , ๊ทธ์๋ฆฌ์ ๋ฃ์ด์ผํด
newArr.remove(at: i-1)
newArr.remove(at: i-1)
newArr.remove(at: i-1)
newArr.insert(String(result), at: i-1)
}
}
} // while newArr.count > 1 ์ข
๋ฃ์ง์
let temp = Int(newArr[0])!
resultList.append(abs(temp))
newArr = arr // ๋ค์ ์ฐ์ฐ์ ์ธํธ๋ฅผ ์ํด์ ๋ค์ ์ด๊ธฐํ
}
return resultList.max()!
}
print(solution(expression))