Post

Programmers_2020 카카오 인턴십 수식 최대화(python)

프로그래머스 -수식 최대화 문제 입니다.

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/67257#


2. 분류 및 난이도

Programmers 문제입니다.
2020 카카오 인턴십 문제입니다. Level 2난이도의 문제입니다.


3. 생각한 것들(문제 접근 방법)

  • brute하게 풀었습니다.
  • oper라는 list에는 숫자를 담고, op라는 list에는 연산자를 담았습니다.
  • 변수가 많아서 오타 등으로 인해 테스트케이스가 많이 실패했습니다.. for문도 깔끔하게 작성하지 못하여 보기 불편하실 수 있습니다.

4. 접근 방법을 적용한 코드

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
import copy
def solution(expression):
    answer = 0
    oper = []
    op = []
    i = 0
    #temp는 string으로 들어온 expression의 숫자들을 임시로 저장하여 나중에 stoi를 해줍니다.
    temp = ""
    # expression을 돌면서 숫자면 temp에 저장하고 아니면 operlist에 temp를 넣고 초기화해줍니다.
    while i < len(expression):
        if(expression[i].isdigit()) : 
            temp+=expression[i]
        else:
            oper.append(int(temp))
            temp=""
            op.append(expression[i])
        i+=1
    # 마지막에 while문을 저장하지 않고 빠져나오므로 따로 또 저장해줍니다.
    oper.append(int(temp))

    def calcu(oper,op,idx):
        #idx : 0 -> +, 1 -> -, 2 -> *
        k = 0
        if idx ==0 :
            while k <len(op):
                if op[k] =="+":
                    first,second = oper[k], oper[k+1]
                    sum = first+second
                    oper[k] = sum
                    del oper[k+1]
                    del op[k]
                else:
                    k+=1
        elif idx==1 : 
            while k < len(op) :
                if op[k] =="-":
                    first,second = oper[k], oper[k+1]
                    sum = first-second
                    oper[k] = sum
                    del oper[k+1] 
                    del op[k]
                else:
                    k+=1
        else : 
            while k <len(op):
                if op[k] =="*":
                    first,second = oper[k], oper[k+1]
                    sum = first*second
                    oper[k] = sum
                    del oper[k+1]
                    del op[k]
                else :
                    k+=1
    # 여기서부터는 더 이쁘게 쓸 수 있을 것 같은데 아직 python문법에 미숙하여 직관적으로 썼습니다.
    # 0 1 2
    # 1 2 0
    # 2 0 1
    for idx1 in range(3):
        idx2 = (idx1+1) % 3
        idx3 = (idx1+2) % 3
        copyoper = copy.deepcopy(oper)
        copyop = copy.deepcopy(op)
        calcu(copyoper,copyop,idx1)
        calcu(copyoper,copyop,idx2)
        calcu(copyoper,copyop,idx3)
        answer = max(answer,abs(copyoper[0]))
    # 이것도 마찬가지..
    #  2 1 0
    #  1 0 2
    #  0 2 1
    for idx1 in range(2,-1,-1):
        idx2 = (idx1-1) 
        if idx2 < 0 :
            idx2 = 2
        idx3 = (idx1-2)
        if idx2 ==0 :
            idx3 = 2
        elif idx3 <0 :
            idx3 = 1
        copyoper = copy.deepcopy(oper)
        copyop = copy.deepcopy(op)
        calcu(copyoper,copyop,idx1)
        calcu(copyoper,copyop,idx2)
        calcu(copyoper,copyop,idx3)
        answer = max(answer,abs(copyoper[0]))
                
    return answer

5. 결과

필요시. c++ 짜드리겠습니다.

This post is licensed under CC BY 4.0 by the author.