반응형
입력
수와 수 사이에 끼워넣을 수 있는 N-1개의 연산자가 주어진다.
연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다.
연산자를 어떻게 끼워넣어도 항상 -10억보다 크거나 같고, 10억보다 작거나 같은 결과가 나오는 입력만 주어진다.
출력
N개의 수와 N-1개의 연산자가 주어졌을 때,
만들 수 있는 식의 결과가 최대인 것과 최소인 것을 구하는 프로그램을 작성하시오.
풀이
하나의 값을 받고 하나의 연산자를 받아 값을 계산한다
그 후 현재의 max와 min 값을 비교해 조건을 충족할 경우 계산한 값을 넣어준다
입력받은 수를 하나씩 넘어가며 반복한다
Swift 전체 코드
let input = Int(readLine()!)!
let numbers = readLine()!.split(separator: " ").map { Int("\($0)")}
var operators = readLine()!.split(separator: " ").map { Int("\($0)")}
var (max, min) = (-1_000_000_000, 1_000_000_000)
func dps(nextNumber: Int, index: Int) {
if input == index {
max = max > nextNumber ? max : nextNumber
min = min < nextNumber ? min : nextNumber
}
for i in 0..<4 {
if operators[i]! > 0 {
operators[i]! -= 1
var value = 0
switch i {
case 0:
value = nextNumber + numbers[index]!
case 1:
value = nextNumber - numbers[index]!
case 2:
value = nextNumber * numbers[index]!
default:
value = nextNumber / numbers[index]!
}
dps(nextNumber: value, index: index+1)
operators[i]! += 1
}
}
}
dps(nextNumber: numbers[0]!, index: 1)
print(max, min)
반응형
'개발 > 알고리즘' 카테고리의 다른 글
[백준] 그리디 - 1931번 회의실 배정 (0) | 2021.04.29 |
---|---|
[백준] 그리디 - 11047번 동전 0 (0) | 2021.04.29 |
[LeetCode] 841. keys and Rooms (0) | 2021.04.20 |
[프로그래머스] 2019 Kakao Winter Internship - 튜플 (0) | 2021.04.15 |
[백준] 14920번 3N + 1 수열 (0) | 2021.04.13 |