728x90
반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 설명
반응형
2. 풀이과정
해당 문제는 각 +, -, * 연산자의 우선순위에 따라 수식을 계산한 결과 중 절댓값이 가장 큰 값을 출력하는 문제이다.
3 연산자의 우선순위 조합에는 총 6가지 경우가 존재하고 각 경우에 따른 수식을 계산하고 그 절댓값을 구한다.
6가지 경우의 절댓값 중 가장 큰 값을 출력하면 된다.
+, -, * 연산자에 따른 수식 연산을 진행할 함수 3개를 생성하여 각 연산자에 따른 수식을 계산한다.
처음에 수식 문자열을 숫자와 연산자로 구분해 주기 위한 함수를 생성하여 최초의 수식을 분리하여 연산을 수행한다.
- 수식 문자열을 숫자와 연산자로 구분해 주기 위한 함수를 생성한다. def split_exp(exp)
- 빈 리스트를 생성한다. li = list()
- 숫자를 저장할 빈 문자열을 생성한다. num = ''
- 수식 문자열의 각 문자를 하나씩 가져오며 for i in exp
- 만약 해당 문자가 연산자이면 if (i == '+' or i == '-' or i == '*')
- 이전까지 저장한 숫자 문자열을 정수형으로 변환하여 리스트에 추가한다. li.append(int(num))
- 해당 연산자를 리스트에 추가한다. li.append(i)
- 숫자를 저장할 문자열을 초기화해 준다. num = ''
- 반면에 해당 문자가 연산자가 아닌 숫자이면 else
- 숫자를 저장하는 문자열에 해당 문자를 이어서 추가한다. num += i
- 만약 해당 문자가 연산자이면 if (i == '+' or i == '-' or i == '*')
- 수식 문자열의 모든 문자를 확인한 후 마지막으로 숫자 문자열을 정수형으로 변환하여 리스트에 추가한다. li.append(int(num))
- 최종적으로 분리한 리스트를 반환해 준다. return li
- 덧셈 연산자의 우선순위일 때 수식을 계산하는 함수를 생성한다. def plus(exp)
- 수식 리스트에 '+' 연산자가 있으면 반복한다. while ('+' in exp)
- 해당 연산자의 인덱스 값을 찾는다. idx = exp.index('+')
- 해당 연산자 위치의 앞뒤 숫자를 덧셈하여 해당 연산자 위치에 저장한다. exp[idx] = exp[idx - 1] + exp[idx + 1]
- 연산에 쓰인 뒷 숫자를 제거하고 del exp[idx + 1]
- 연산에 쓰인 앞 숫자를 제거한다. del exp[idx - 1]
- '+' 연산자가 더 이상 없으면 연산 후의 수식 리스트를 반환한다. return exp
- 수식 리스트에 '+' 연산자가 있으면 반복한다. while ('+' in exp)
- 뺄셈 연산자의 우선순위일 때 수식을 계산하는 함수를 생성한다. def minus(exp)
- 수식 리스트에 '-' 연산자가 있으면 반복한다. while ('-' in exp)
- 해당 연산자의 인덱스 값을 찾는다. idx = exp.index('-')
- 해당 연산자 위치의 앞뒤 숫자를 뺄셈하여 해당 연산자 위치에 저장한다. exp[idx] = exp[idx - 1] - exp[idx + 1]
- 연산에 쓰인 뒷 숫자를 제거하고 del exp[idx + 1]
- 연산에 쓰인 앞 숫자를 제거한다. del exp[idx - 1]
- '-' 연산자가 더 이상 없으면 연산 후의 수식 리스트를 반환한다. return exp
- 수식 리스트에 '-' 연산자가 있으면 반복한다. while ('-' in exp)
- 곱셈 연산자의 우선순위일 때 수식을 계산하는 함수를 생성한다. def mul(exp)
- 수식 리스트에 '*' 연산자가 있으면 반복한다. while ('*' in exp)
- 해당 연산자의 인덱스 값을 찾는다. idx = exp.index('*')
- 해당 연산자 위치의 앞뒤 숫자를 곱셈하여 해당 연산자 위치에 저장한다. exp[idx] = exp[idx - 1] * exp[idx + 1]
- 연산에 쓰인 뒷 숫자를 제거하고 del exp[idx + 1]
- 연산에 쓰인 앞 숫자를 제거한다. del exp[idx - 1]
- '*' 연산자가 더 이상 없으면 연산 후의 수식 리스트를 반환한다. return exp
- 수식 리스트에 '*' 연산자가 있으면 반복한다. while ('*' in exp)
- 각 연산자의 우선순위 조합의 모든 경우를 계산하면 그 결과는 한 숫자가 저장되어 있는 리스트로 나오는데, 해당 리스트의 값을 절댓값으로 바꾼 결과 중 가장 큰 값을 정답에 저장한다. answer = max(abs(plus(minus(mul(split_exp(expression))))[0]), abs(plus(mul(minus(split_exp(expression))))[0]), abs(minus(plus(mul(split_exp(expression))))[0]), abs(minus(mul(plus(split_exp(expression))))[0]), abs(mul(plus(minus(split_exp(expression))))[0]), abs(mul(minus(plus(split_exp(expression))))[0]))
3. 소스코드
def solution(expression):
answer = 0
def split_exp(exp):
li = list()
num = ''
for i in exp:
if (i == '+' or i == '-' or i == '*'):
li.append(int(num))
li.append(i)
num = ''
else:
num += i
li.append(int(num))
return li
def plus(exp):
while ('+' in exp):
idx = exp.index('+')
exp[idx] = exp[idx - 1] + exp[idx + 1]
del exp[idx + 1]
del exp[idx - 1]
return exp
def minus(exp):
while ('-' in exp):
idx = exp.index('-')
exp[idx] = exp[idx - 1] - exp[idx + 1]
del exp[idx + 1]
del exp[idx - 1]
return exp
def mul(exp):
while ('*' in exp):
idx = exp.index('*')
exp[idx] = exp[idx - 1] * exp[idx + 1]
del exp[idx + 1]
del exp[idx - 1]
return exp
answer = max(abs(plus(minus(mul(split_exp(expression))))[0]),
abs(plus(mul(minus(split_exp(expression))))[0]),
abs(minus(plus(mul(split_exp(expression))))[0]),
abs(minus(mul(plus(split_exp(expression))))[0]),
abs(mul(plus(minus(split_exp(expression))))[0]),
abs(mul(minus(plus(split_exp(expression))))[0]))
return answer
728x90
반응형
'프로그래머스 > Python' 카테고리의 다른 글
[프로그래머스] 거리두기 확인하기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.06.26 |
---|---|
[프로그래머스] 여행경로 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.06.15 |
[프로그래머스] 미로 탈출 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.05.26 |
[프로그래머스] 행렬 테두리 회전하기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.05.19 |
[프로그래머스] 괄호 변환 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.05.05 |
[프로그래머스] 가장 먼 노드 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.05.04 |
[프로그래머스] 섬 연결하기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.04.28 |
[프로그래머스] 줄 서는 방법 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.04.25 |