일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 일상회화
- BFS
- Backtracking Algorithm
- 다이나믹프로그래밍
- 블록체인
- 영어기초
- 백준
- 영어회와
- 파이썬
- dfs
- 라이브아카데미
- 영어 회화
- 회화기초
- 영어
- 관계절
- used to
- 알고리즘
- 완전탐색
- 전치사
- 백트래킹
- python
- 영어회화
- N-Queens
- 라이브 아카데미
- Hyperledger Fabric
- baekjoon
- IF
- 회화
- 정렬
- 백트래킹 알고리즘
- Today
- Total
내 맴
[ 백준 ] 14888번 : 연산자 끼워넣기 (파이썬) 본문
문제 )
https://www.acmicpc.net/problem/14888
[ 풀이 ]
Baekjoon 사이트에는 이 문제가 Backtracking Algorithm이라고 분류되어있길래 Backtracking방법으로 풀어야 하나 했는데, promising한 node들을 추려줘야하는데 그 기준이 없는거 같았다.
Maximum과 Minimum값을 둘 다 구해줘야하기 때문에 그냥 모든 경우의 수를 확인해야만 한다.
< calculate Function의 Algorithm > -Recursive Function 사용
✔ 숫자의 갯수 → N
✔ 숫자가 있는 배열 → num
✔ '+, -, x, / ' 각 연산의 갯수 → add,sub,mul,div
✔ 현재 값 → now
✔ 최대값 , 최솟값 → maxi, mini
✔ 숫자배열 num에 접근하는 index → idx (1~N)
If 계산을 마치면,
1. 새로 구한 현재값(now)와 maxi값 중 더 큰 값을 maxi값으로 update한다
2. 새로 구한 현재값(now)와 minii값 중 더 작은 값을 mini값으로 update한다
Else
1. If '+'연산이 존재하면
Ⅰ. calculate(idx+1,now+num[idx],add-1,sub,mul,div)
1. If '-'연산이 존재하면
Ⅰ. calculate(idx+1,now-num[idx],add,sub-1,mul,div)
1. If 'x'연산이 존재하면
Ⅰ. calculate(idx+1,now*num[idx],add,sub,mul-1,div)
1. If '/'연산이 존재하면
Ⅰ. calculate(idx+1,int(now/num[idx]),add,sub,mul,div-1)
- python code
maxi=-1e9
mini=1e9
def calculate(idx,now,add,sub,mul,div):
global N,maxi,mini
if idx==N:
maxi=max(now,maxi)
mini=min(now,mini)
return
else:
if add :
calculate(idx+1,now+num[idx],add-1,sub,mul,div)
if sub:
calculate(idx+1,now-num[idx],add,sub-1,mul,div)
if mul:
calculate(idx+1,now*num[idx],add,sub,mul-1,div)
if div:
calculate(idx+1,int(now/num[idx]),add,sub,mul,div-1)
N=int(input())
num=list(map(int,input().split()))
add,sub,mul,div=map(int,input().split()) # +, -,x,/
now=num[0]
calculate(1,now,add,sub,mul,div)
print(maxi)
print(mini)
'Algorithm > Baekjoon 문제풀이' 카테고리의 다른 글
[ 백준 ] 2108번 : 통계학 (파이썬) (0) | 2020.05.18 |
---|---|
[ 백준 ] 14889번 : 스타트와 링크 (파이썬) (0) | 2020.05.16 |
[ 백준 ] 15652번 : N과 M (4) (파이썬) (0) | 2020.05.13 |
[ 백준 ] 15651번 : N과 M (3) (파이썬) (0) | 2020.05.12 |
[ 백준] 15650번 : N과 M (2) (파이썬) (0) | 2020.05.11 |