728x90
https://programmers.co.kr/learn/courses/30/lessons/67257
파이썬으로 푸는거 익히기 너무 잘 했다고 생각되는 문제..
문자열다룰떄 압도적으로 쉬웠다.
수와 연산자로 나눠준 후에
모든 경우의수를 순열로 구해서
모든 경우마다 나오는 수식의 값중 max를 찾아줬다.
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
|
# 숫자와 문자로 분리
# 분리해서 따로따로 list에 저장
# 모든 경우에수에 맞게 순열을 짜서 계산, max값 도출
visit = [0 for i in range(3)]
formula = ["+", "-", "*"]
priority = []
# 계산하는 함수
def calculator(a, b, p):
if p == "+":
return a + b
elif p == "-":
return a - b
else:
return a * b
def dfs(idx, temp):
global visit, priority
if idx == 3:
priority.append(temp[:])
return
for i in range(3):
if visit[i] == 1:
continue
visit[i] = 1
temp.append(formula[i])
dfs(idx + 1, temp)
temp.pop()
visit[i] = 0
def solution(expression):
answer = 0
formula_list = []
num_list = []
slice_idx = 0
# 문자와 숫자를 분리합니다
for i in range(len(expression)):
if expression[i] in formula:
formula_list.append(expression[i])
num_list.append(int(expression[slice_idx:i]))
slice_idx = i + 1
# 마지막 숫자는 위의 if문으로 걸러낼 수 없어
num_list.append(int(expression[slice_idx:]))
# 순열로 연산자의 우선순위를 결정, 모두 더해서 abs(max) 값을 도출하자
dfs(0, [])
for prior in priority:
temp_formula = formula_list[:]
temp_num = num_list[:]
for p in prior:
i = 0
while (i < len(temp_formula)):
if p == temp_formula[i]:
num1 = temp_num[i]
num2 = temp_num.pop(i + 1)
temp_num[i] = calculator(num1, num2, p)
temp_formula.pop(i)
i -= 1
i += 1
if abs(temp_num[0]) > answer:
answer = abs(temp_num[0])
return answer
|
cs |
728x90
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스 LV 2] 튜플 파이썬/python (0) | 2021.06.03 |
---|---|
[프로그래머스 LV 2] JadenCase 문자열 만들기 (0) | 2021.06.03 |
[프로그래머스 LV 2] 예상 대진표 파이썬/python (0) | 2021.06.03 |
[프로그래머스 LV 2] 메뉴 리뉴얼 파이썬 (0) | 2021.05.19 |
[프로그래머스 LV 2] [1차] 뉴스 클러스터링 C++/파이썬 (0) | 2021.05.19 |