programmers.co.kr/learn/courses/30/lessons/67257
오늘의 문제입니다. 수식 문자열이 주어지면 (+,-,*)연산의 우선 순위를 능력껏 수정해서 최대값을 계산하라는 문제입니다.
문제 접근
저 같은 경우에는 일단 "100+200"이 있으면 100,+,200 씩 나누도록 분리했습니다.
test = expression.replace('-',' - ').replace('+',' + ').replace('*',' * ').split()
제가 한건 정석적인 방법은 아니라고 생각해요. split 함수를 이용해서 공백을 기준으로 문자열을 자를 수 있잖아요? 그럼 '-'를 ' - '로 바꾸면 앞 뒤로 공백이 들어가니까 여기가 다 잘리겠죠. 이렇게 조금 우회해서 사용해봤습니다.
그 다음에는 이제 수식조합이 나올 수 있는 n!의 경우의 수 만큼 반복문을 돌리면서 계산을 해야겠죠. 사실상 이게 메인이죠.
소스 코드
그렇게 완성된 코드입니다. python의 경우 permutations를 이용해서 순열을 구할 수 있습니다. 현재는 우선순위에 따른 '순서'가 필요하니 조합이 아니라 순열을 이용했습니다. 또 원래는 막 stack에 넣다뺐다 막 그랬는데 python list 슬라이싱..?을 이용하도록 수정했습니다. 참고로 저는 연산자에 따라서 계산하는 함수를 따로 만들어서 사용했는데요. 심지어 문자열이라서 일일이 int형으로 고쳐줬습니다만.. python에 eval이라는 함수를 이용하면 문자열 수식을 계산할 수 있다는 사실.. 두둥..
특히나 python은 파이써닉하게 푸는 사람들이 많아서 다른 사람들의 풀이를 보면 그게 그렇게 재밌습니다. eval() 관련 링크 첨부해드리겠습니다.
eval 함수 링크
'알고리즘 > ps' 카테고리의 다른 글
[python] 백준 2357 최솟값과 최댓값 (0) | 2021.05.12 |
---|---|
[python] 로또의 최고 순위와 최저 순위 (0) | 2021.05.07 |
[python] 2021 KAKAO BLIND RECRUITMENT 신규 아이디 추천 (0) | 2021.05.04 |
[python] 백준 3190 뱀 (0) | 2021.03.31 |
[파이썬] 백준 바이러스 2606번 (0) | 2021.03.17 |