문제
https://www.acmicpc.net/problem/14888
풀이
permutations으로 연산자 조합을 모두 만들고 set으로 중복을 제거했다.
파이썬과 c++14의 음수 나누기 방식이 달라 몇 번 틀렸었다.
(-1) // 3 의 경우 c++14는 0, 파이썬은 -1을 반환한다.
파이썬은 내림이라는 수학적 정의에 따라 설계했다고 함..
파이썬으로 풀려면 양수로 바꾸고 몫을 취한 다음 다시 음수로 만들어줘야 한다.
import sys
from itertools import permutations
input = sys.stdin.readline
n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
op = []
for i, o in enumerate(b):
op.extend([i]*o)
opc = set(permutations(op, len(op)))
results = []
for c in opc:
res = a[0]
for i in range(n-1):
if c[i] == 0:
res += a[i + 1]
elif c[i] == 1:
res -= a[i + 1]
elif c[i] == 2:
res *= a[i + 1]
else:
if res < 0:
res = int(res*(-1) // a[i + 1])
res *= -1
else:
res = int(res // a[i + 1])
results.append(res)
print(max(results))
print(min(results))
그렇지만 재귀로 푸는 것이 훨씬 빠르다고 한다.
다른 사람의 코드
'알고리즘 스터디' 카테고리의 다른 글
[백준] 14719 빗물 파이썬 (0) | 2021.10.30 |
---|---|
[백준] 2504 괄호의 값 파이썬 (0) | 2021.10.30 |
[백준] 14891 톱니바퀴 파이썬 (0) | 2021.10.03 |
[백준] 1918 후위표기식 파이썬 (0) | 2021.10.03 |
[백준] 1504 특정한 최단경로 파이썬 (0) | 2021.09.30 |