본문 바로가기
Algorithm/동적계획법

[프로그래머스 lv 4] 사칙연산

by HANNI하니 2023. 6. 7.

사용 언어 - Python3

문제 - 사칙연산

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

정답

DP 규칙 찾기 (정답 맞춘 여부 X) 

사칙연산의 최대값을 구하기

arr를 뒤에서부터 확인하면서 마이너스가 나오기 전까지 sum_value에 값을 더해준다.

  • 숫자인 경우, sum_value에 값을 더한다. sum_value += int(arr[idx])
  • +부호인 경우, continue

마이너스 부호를 만나면, 현재까지 저장한 값 sum_value에만 마이너스를 붙일지, 앞의 값체 계산한 값에서 마이너스를 붙일지 결정해야 한다. 최대/최소값을 갱신한다.

  • 최솟값 = min(-(sum_value + 최대값), -sum + 최소값)
  • 최대값 = max(-(sum_value+최소값),-minus_v+(sum_value-minus_v)최대값)
  • 갱신 후, sum_value = 0으로 초기화해주기

마지막에 저장된 sum_value까지 최대값에 더해주면, 정답이 된다.

def solution(arr):
    minmax = [0, 0]
    sum_value = 0
    for idx in range(len(arr)-1, -1, -1):
        if arr[idx] == '+':
            continue
        elif arr[idx] == '-':
            tempmin, tempmax = minmax
            minmax[0] = min(-(sum_value + tempmax), -sum_value + tempmin)
            # -(sum + max):-가 식전체에 붙는 경우, -sum+min:-가 이전 -값 앞까지만 붙는 경우
            minus_v = int(arr[idx+1])
            minmax[1] = max(-(sum_value + tempmin), -minus_v+(sum_value - minus_v) + tempmax)
            # -(sum + min):-가 식전체에 붙는 경우, -v+(sum-v)+max:-가 바로 뒤의 값에만 붙는 경우
            sum_value = 0
        elif int(arr[idx]) >= 0:
            sum_value += int(arr[idx])
    minmax[1] += sum_value
    return minmax[1]

 

 

 

 

레퍼런스

  • 정답 풀이
 

[프로그래머스] 코딩테스트 연습 - 사칙연산(Python)

코딩테스트 연습 - 사칙연산 [찾아라 프로그래밍 마에스터] 풀이 저는 개인적으로 정말 어려웠던 문제였습니다. 처음 시도했던 방법은 순열이었습니다. 풀다가 생각해보니 순열로 풀려면 모든

tiktaek.tistory.com

  • 깃허브
 

GitHub - yyeongeun/codingtest: 코딩테스트 공부

코딩테스트 공부. Contribute to yyeongeun/codingtest development by creating an account on GitHub.

github.com

 

댓글