문제
연산자 끼워넣기 (https://www.acmicpc.net/problem/14888)
풀이
1. 초기접근
- 문제조건 해석
- N <= 11 로, 매우작음.
- 모든 경우의 수를 다 해본다고 할 경우, 시간 복잡도 O(10!) 으로 1초 안으로 출력을 뽑아낼 수 있음.
- 연산자를 나열할 때, 순서에 따라 결과 값이 달라지므로, '순열' 을 사용해야 함.
- 알고리즘
- 입력받은 연산자로 만들 수 있는 모든 순열을 탐색해보며, 최대값과 최소값을 찾음.
- 순열을 만드는 방법은 파이썬 내장 함수인,
itertools.permutations()
로 손쉽게 구현
- 코드
n = int(input())
a = list(map(int, input().split()))
op_cnt = list(map(int, input().split()))
op = []
for idx, value in enumerate(op_cnt):
op.extend([idx]*value)
import itertools
max_value = float('-inf')
min_value = float('inf')
for ops in itertools.permutations(op):
res = a[0]
for operator, operand in zip(ops, a[1:]):
if operator == 0:
res += operand
elif operator == 1:
res -= operand
elif operator == 2:
res *= operand
else:
res = int(res / operand)
max_value = res if res > max_value else max_value
min_value = res if res < min_value else min_value
print(max_value)
print(min_value)
2. 유의할 점
- python으로 제출할 시, 시간초과가 뜸.
- pypy 로 제출하면 정답.
'취업과 기본기 튼튼 > 코딩 테스트 노트' 카테고리의 다른 글
[BOJ] 1405. 미친로봇 (0) | 2019.04.04 |
---|---|
[삼성 SW Expert Academy] 1247. 최적 경로 (0) | 2019.04.02 |
파이썬으로 문제 풀 때 주의해야할 점들 (5) | 2019.03.26 |
[BOJ] 적록색맹 (0) | 2019.03.22 |
[프로그래머스] 거스름돈 (0) | 2019.03.21 |