728x90
https://www.acmicpc.net/problem/14888
문제 접근
- 주어진 사측연산 기호의 개수에 맞춰 주어진 수들로 만들 수 있는 최대값, 최소값을 구하는 문제
- dfs로 수를 하나씩 만들어서 가장 큰 값, 가장 작은 값을 출력
정답 코드
import sys
input = sys.stdin.readline
N = int(input())
num = list(map(int, input().split()))
op = list(map(int, input().split()))
maximum = -1e9
minimum = 1e9
def dfs(depth, total, plus, minus, multiply, divide):
global maximum, minimum
if depth == N:
maximum = max(total, maximum)
minimum = min(total, minimum)
return
# 각 기호가 있는 경우
if plus:
dfs(depth +1, total + num[depth], plus -1, minus, multiply, divide)
if minus:
dfs(depth + 1, total - num[depth], plus, minus - 1, multiply, divide)
if multiply:
dfs(depth + 1, total * num[depth], plus, minus, multiply - 1, divide)
if divide:
dfs(depth + 1, int(total / num[depth]), plus, minus, multiply, divide - 1)
dfs(1, num[0], op[0], op[1], op[2], op[3])
print(maximum)
print(minimum)
처음에 너무 복잡하게생각해서 코드가 꼬였다...결국 다른사람 풀이를 참고했다.
코드부터 치는 습관 줄이고 근거를 토대로 단순 명료하게 구현하는 연습이 필요해보였다.
출저
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
백준 1012 - 유기농 배추(파이썬) (0) | 2023.07.25 |
---|---|
백준 - 13458(시험 감독, python) (0) | 2023.06.19 |
백준-14501(퇴사, python) (0) | 2023.06.18 |
백준 - 11651(좌표 정렬하기, python) (0) | 2023.06.18 |
백준-3009(네 번째 점, python) (0) | 2023.06.15 |