https://www.acmicpc.net/problem/14888
내 풀이:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
N = int(input())
sequence = list(map(int, input().split()))
operator = list(map(int, input().split()))
max_num = -1000000000
min_num = 1000000000
def go(index, operator, last):
global max_num, min_num
if index == N:
if last > max_num:
max_num = last
if last < min_num:
min_num = last
return
if operator[0] != 0:
last += sequence[index]
operator[0] -= 1
go(index+1, operator, last)
last -= sequence[index]
operator[0] += 1
if operator[1] != 0:
last -= sequence[index]
operator[1] -= 1
go(index+1, operator, last)
last += sequence[index]
operator[1] += 1
if operator[2] != 0:
last *= sequence[index]
operator[2] -= 1
go(index+1, operator, last)
last //= sequence[index]
operator[2] += 1
if operator[3] != 0:
save = last
last = int(last / sequence[index])
operator[3] -= 1
go(index+1, operator, last)
last = save
operator[3] += 1
go(1, operator, sequence[0])
print(max_num)
print(min_num)
|
Python3, 88ms
문제 조건에 따라 max값과 min값을 각각 -10억, +10억으로 설정한 후 각각의 조건에 해당하면 값을 바꾸도록 했다. 재귀적으로 푸는 방법을 택했기 때문에 모든 경우의 수에 대해서 계산한다. 마지막에 operator[3]에 대해서만 나눗셈이 조건문중에서는 마지막이기 때문에 원래의 값으로 되돌리는 행위를 하지 않았는데 이유는 모르겠으나 이 때문에 샘플 하나에 대해서 계속해서 다른 결과값을 보였기 때문에 문제를 푸는 데 다소 시간이 오래 소요되었다. 이에 대한 고찰은 좀 더 생각해 보아야 할 것 같다.
파이썬으로 풀어보는 백준 2579번: 계단 오르기 (0) | 2020.01.22 |
---|---|
파이썬으로 풀어보는 백준 14889번: 스타트와 링크 (0) | 2020.01.21 |
파이썬으로 풀어보는 백준 2580번: 스도쿠 (0) | 2020.01.20 |
[SW Expert Academy] 5550. 나는 개구리로소이다 (0) | 2020.01.18 |
백준 2108번: 통계학 (0) | 2020.01.17 |
댓글 영역