728x90
https://www.acmicpc.net/problem/16637
처음에 여러 시도를해봤다.
+ - * 사이의 우선순위를 내가 임의로 지정하면되지않을까? 싶었지만 불가능했다.
이 문제는 모든 경우를 완전탐색해서 답을 도출해야됐다.
내가 임의로 연산자 우선순위를 주고 싶지만 그럴경우 처리하지 못 하는 변수가 생긴다.
내가 푼 풀이법은
우선 사용할 연산자의 인덱스를 리스트 안에 넣어주고
그 리스트에 넣은대로 선 연산을 하고
그 후 선 연산한 상태의 숫자 배열을 계산해서 답을 도출한다.
그 후 답이 최대일때를 찾으면 된다
와 한 두시간걸린듯 ㅜㅜ 풀고나서 진짜 감격했다. 코드가 좀 더럽지만..
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
import sys
input = sys.stdin.readline
n = int(input())
num_str = input().strip()
visit = [0] * (n + 1)
li = []
max_num = -9999999999999999999999999
if n == 1:
max_num = int(num_str[0])
def result(li1):
number = int(li1[0])
for i in range(1, len(li1) - 1, 2):
if li1[i] == '+':
number += int(li1[i + 1])
elif li1[i] == '-':
number -= int(li1[i + 1])
else:
number *= int(li1[i + 1])
return number
# 처음 들어온 연산자 먼저 계산해준다.
def first_cal(f_li):
arr = []
i = 0
while i < len(num_str):
if i in f_li:
a = arr.pop()
if num_str[i] == '+':
num = int(a) + int(num_str[i + 1])
arr.append(str(num))
i += 2
elif num_str[i] == '*':
num = int(a) * int(num_str[i + 1])
arr.append(str(num))
i += 2
elif num_str[i] == '-':
num = int(a) - int(num_str[i + 1])
arr.append(str(num))
i += 2
else:
arr.append(num_str[i])
i += 1
return result(arr)
def calculate(x):
global max_num
if len(li) > 0:
r = first_cal(li)
if max_num < r:
max_num = r
if x == n:
return
# 연산자만 탐색, 선택된 연산자 인덱스를 넣어줌
for i in range(x, n, 2):
if visit[i] == 1:
continue
visit[i] = visit[i + 2] = 1
li.append(i)
calculate(i + 4)
li.pop()
visit[i] = visit[i + 2] = 0
calculate(1)
print(max_num)
|
cs |
728x90
'PS > 백준' 카테고리의 다른 글
[백준 13460번] 구슬 탈출 2 (파이썬/python) (0) | 2021.06.24 |
---|---|
[백준 13458번] 시험 감독 (파이썬/python) (0) | 2021.06.19 |
[백준 1300번] K번째 수 (파이썬/python) (0) | 2021.06.16 |
[백준 12015번] 가장 긴 증가하는 부분 수열 2 (파이썬/python) (0) | 2021.06.16 |
[백준 12865번] 평범한 배낭 (파이썬/python) (0) | 2021.06.16 |