Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Brigthics를 이용한 분석
- Brigthics Studio
- 혼공
- 데이터 분석
- 포스코 청년
- 브라이틱스 서포터즈
- 포스코 아카데미
- 캐글
- 추천시스템
- 삼성SDS Brigthics
- 삼성 SDS Brigthics
- 삼성SDS
- 데이터분석
- 혼공학습단
- Brightics를 이용한 분석
- 직원 이직여부
- 브라이틱스
- 팀 분석
- 개인 의료비 예측
- 영상제작기
- 노코드AI
- 모델링
- Brigthics
- Brightics Studio
- 혼공머신
- 삼성SDS Brightics
- 삼성 SDS
- 혼공머신러닝딥러닝
- 직원 이직률
- Brightics
Archives
- Today
- Total
데이터사이언스 기록기📚
[프로그래머스/Python] Level 2_수식 최대화 (2020 카카오 인턴십) 본문
📌문제 유형
2020 카카오 인턴십 (구현)
📌문제
📌나의 문제풀이
- list_에 숫자, 연산자 분리해서 저장
- 우선 연산자부터 계산해서 값 갱신
from copy import deepcopy
def solution(expression):
answer = 0
prior = [('+','-','*'), ('+','*','-'), ('*','-','+'),
('*','+','-'), ('-','*','+'), ('-','+','*')]
list_ = []
# 숫자, 연산자 분리해서 list_에 한 번에 저장
num = ''
for s in range(len(expression)):
if expression[s] not in ['+','-','*']:
num += expression[s]
else:
list_.append(int(num))
num = ''
list_.append(expression[s])
if s == len(expression)-1:
list_.append(int(num))
# 우선순위 저장해 놓은거 검토
for i in range(6):
nums_copy = deepcopy(list_)
# nums_copy 개수가 1개 될 때까지 반복
while True:
if len(nums_copy) == 1:
break
# 우선순위 3개 항목 차례대로 검증
for j in range(3):
flag = -1 # while문 반복여부 판단. flag = 0이면 해당 연산자 계산 끝. flag = 1이면 해당 연산자 남아있음
# 직접 계산하면서 nums_copy 1개로 줄이기
while True:
if flag == 0:
break
for k in range(len(nums_copy)):
if nums_copy[k] == prior[i][j]:
if nums_copy[k] == '+':
nums_copy[k-1] = nums_copy[k-1] + nums_copy[k+1]
elif nums_copy[k] == '-':
nums_copy[k-1] = nums_copy[k-1] - nums_copy[k+1]
else:
nums_copy[k-1] = nums_copy[k-1] * nums_copy[k+1]
nums_copy = nums_copy[:k] + nums_copy[k+2:]
flag = 1
break
flag = 0
# 음수인 경우, 양수로 바꾸기
if nums_copy[0] < 0:
nums_copy[0] = abs(nums_copy[0])
# 가장 큰 값 저장
if nums_copy[0] > answer:
answer = nums_copy[0]
return answer
📌다른 사람의 문제풀이
- split과 join활용, DFS 사용
- 가장 우선적인 연산자 기준으로 split 사용
- 다시 calc로 계산, 내부의 값 생성 후 우선 연산자로 join
from itertools import permutations
def calc(priority, n, expression):
if n == 2:
return str(eval(expression))
if priority[n] == '*':
res = eval('*'.join([calc(priority, n + 1, e) for e in expression.split('*')]))
if priority[n] == '+':
res = eval('+'.join([calc(priority, n + 1, e) for e in expression.split('+')]))
if priority[n] == '-':
res = eval('-'.join([calc(priority, n + 1, e) for e in expression.split('-')]))
return str(res)
def solution(expression):
answer = 0
priorities = (list(permutations(['*','-','+'], 3)))
for priority in priorities:
res = int(calc(priority, 0, expression))
answer = max(answer, abs(res))
return answer
- 잘 이해 안가는 코드
def solution(expression):
operations = [('+', '-', '*'),('+', '*', '-'),('-', '+', '*'),('-', '*', '+'),('*', '+', '-'),('*', '-', '+')]
answer = []
for op in operations:
a = op[0]
b = op[1]
temp_list = []
for e in expression.split(a):
temp = [f"({i})" for i in e.split(b)]
temp_list.append(f'({b.join(temp)})')
answer.append(abs(eval(a.join(temp_list))))
return max(answer)
📌리뷰
- 복잡한 연산식은 join, split으로 계산 가능
- 연산식을 숫자, 연산자로 구분해서 리스트 생성하면 접근하기 쉬움
728x90
'Coding Test > 프로그래머스(Python)' 카테고리의 다른 글
[프로그래머스/Python] Level 2_행렬 테두리 회전하기 (2021 Dev-Match:웹 백엔드 개발자(상반기)) (0) | 2023.09.26 |
---|---|
[프로그래머스/Python] Level 2_배달 (Summer/Winter Coding(~2018)) (0) | 2023.09.25 |
[프로그래머스/Python] Level 2_[3차]방금그곡 (2018 KAKAO BLIND RECRUITMENT) (0) | 2023.08.14 |
[프로그래머스/Python] Level 2_메뉴 리뉴얼(2021 KAKAO BLIND RECRUITMENT) (0) | 2023.06.09 |
[프로그래머스/Python] Level 2_두 큐 합 같게 만들기(2022 KAKAO TECH INTERNSHIP) (0) | 2023.06.08 |
Comments