문제링크 : https://programmers.co.kr/learn/courses/30/lessons/67257

 

코딩테스트 연습 - 수식 최대화

IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과 �

programmers.co.kr

 

 

 문제설명 

 

참가자에게 주어진 연산 수식이 담긴 문자열 expression이 매개변수로 주어질 때, 우승 시 받을 수 있는 가장 큰 상금 금액을 return 하는 solution 함수

 

 

 알고리즘 

 

1. + - * 에대한 우선순위를 조합으로 구해서 순서대로 계산하며 최대값을 도출하면 된다 .

2. 이문제 풀때 조합 사용법을 몰라서 나는 그냥 ctrl + c, ctrl + v 해서 넣었다. 그래서 코드가더럽다.

 

 코드 

 

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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# 수식 최대화
def minus(giho,numbers):
    numbers = list(map(int,numbers))
    cnt = giho.count('-')
    for i in range(cnt):
        for c in giho:        
            if c =='-':
                idx = giho.index('-')
                giho.pop(idx)
                numbers[idx] = numbers[idx]-numbers[idx+1]
                numbers.pop(idx+1)
                break
        
    return [giho,numbers]
 
def plus(giho,numbers):
    numbers = list(map(int,numbers))
    cnt = giho.count('+')
    for i in range(cnt):
        for c in giho:        
            if c =='+':
                idx = giho.index('+')
                giho.pop(idx)
                numbers[idx] = numbers[idx]+numbers[idx+1]
                numbers.pop(idx+1)
                break
        
    return [giho,numbers]
def mult(giho,numbers):
    
    numbers = list(map(int,numbers))
 
    cnt = giho.count('*')
    for i in range(cnt):
        for c in giho:        
            if c =='*':
                idx = giho.index('*')
                giho.pop(idx)
                numbers[idx] = numbers[idx]*numbers[idx+1]
                numbers.pop(idx+1)
                break
        
    return [giho,numbers]
 
def solution(expression):
    numbers = []
    giho = []
    cut = 0
    expression=list(expression)
    for idx in range(len(expression)):
        
        if expression[idx] in ['*','+','-'] :
            numbers.append(expression[cut:idx])
            giho.append(expression[idx])
            cut=idx+1
            for i in range(idx+1):
                expression[i]='.'
    
    while(1):
        try:
            expression.remove('.')
        except:
            break
        
 
    numbers.append(expression)
        
    rgiho=[]+giho
    rnumbers=[]
    for i in range(len(numbers)):
        num=''
        for j in range(len(numbers[i])):
            num+=numbers[i][j]
        rnumbers.append(int(num))
    max = 0   
    
    giho =[]+rgiho
    numbers=[]+rnumbers
    test = mult(giho,numbers)
    test = plus(test[0],test[1])
    test = minus(test[0],test[1])
    if max < abs(test[1][0]) : max = abs(test[1][0])
    
    
    giho =[]+rgiho
    numbers=[]+rnumbers
    test = mult(giho,numbers)
    test = minus(test[0],test[1])
    test = plus(test[0],test[1])
    if max < abs(test[1][0]) : max = abs(test[1][0])
        
    
    giho =[]+rgiho
    numbers=[]+rnumbers
    test = plus(giho,numbers)
    test = mult(test[0],test[1])
    test = minus(test[0],test[1])
    if max < abs(test[1][0]) : max = abs(test[1][0])
        
    
    giho =[]+rgiho
    numbers=[]+rnumbers   
    test = plus(giho,numbers)
    test = minus(test[0],test[1])
    test = mult(test[0],test[1])
    if max < abs(test[1][0]) : max = abs(test[1][0])
        
    giho =[]+rgiho
    numbers=[]+rnumbers    
    test = minus(giho,numbers)
    test = plus(test[0],test[1])
    test = mult(test[0],test[1])
    if max < abs(test[1][0]) : max = abs(test[1][0])
        
    
    giho =[]+rgiho
    numbers=[]+rnumbers   
    test = minus(giho,numbers)
    test = mult(test[0],test[1])
    test = plus(test[0],test[1])
 
    if max < abs(test[1][0]) : 
        max = abs(test[1][0])  
    return max
 
cs
 

 

ariz1623