문제: https://programmers.co.kr/learn/courses/30/lessons/67257
코딩테스트 연습 - 수식 최대화
IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과
programmers.co.kr
1. +, -, *로 우선순위 순열을 만들어줍니다.
2. 사전작업으로 숫자들만 있는 배열과 연산자들만 있는 배열을 만들어줍니다.
3. 우선순위를 전부 다 돌며 값을 계산합니다.
4. 그렇게 해서 나온 값을 절댓값으로 만들고 result와 max연산을 해주면 됩니다.
import Foundation
func permute(_ nums: [String], _ targetNum: Int) -> [[String]] {
var result = [[String]]()
var visited = [Bool](repeating: false, count: nums.count)
func permutation(_ nowPermute: [String]) {
if nowPermute.count == targetNum {
result.append(nowPermute)
return
}
for i in 0..<nums.count {
if visited[i] == true {
continue
}
else {
visited[i] = true
permutation(nowPermute + [nums[i]])
visited[i] = false
}
}
}
permutation([])
return result
}
func solution(_ expression:String) -> Int64 {
let priorities = permute(["+", "-", "*"], 3) // 우선순위
let array = Array(expression)
var result = 0
var temp = ""
var ints = [Int]()
var operators = [String]()
for i in 0..<expression.count {
let str = String(array[i])
if Int(str) == nil {
ints.append(Int(temp)!)
temp = ""
operators.append(str)
} else {
temp.append(str)
}
if i == expression.count - 1 {
ints.append(Int(temp)!)
temp = ""
}
}
for priority in priorities {
var ints = ints
var operators = operators
for pr in priority {
var op = 0
while op < operators.count {
if pr == operators[op] {
let first = ints[op]
let second = ints[op + 1]
ints.remove(at: op)
// print(first, second, ints, operators)
if pr == "+" {
ints[op] = first + second
} else if pr == "*" {
ints[op] = first * second
} else if pr == "-" {
ints[op] = first - second
}
operators.remove(at: op)
} else {
op += 1
}
}
}
result = max(result, abs(ints.first!))
}
return Int64(result)
}
solution("100-200*300-500+20") // 60420
solution("50*6-3*2") // 300
'알고리즘' 카테고리의 다른 글
[Swift] 프로그래머스 - 예상 대진표 (0) | 2022.02.11 |
---|---|
[Swift] 프로그래머스 - 카카오 튜플 (0) | 2022.02.11 |
[Swift] 프로그래머스 - 카카오 거리두기 확인하기 (0) | 2022.02.11 |
[Swift] 프로그래머스 - 카카오 뉴스 클러스터링 (0) | 2022.02.10 |
[Swift] 프로그래머스 - 짝지어 제거하기 (0) | 2022.02.10 |
댓글