일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- MSBuild
- 안드로이드스튜디오
- 파이썬
- Github
- SWEA
- level3
- 자바
- BFS
- 내휴학생활중의아주큰일
- LEVEL2
- 프로그래머스
- 어렵다
- SQL
- level4
- build
- py
- 컨트리뷰톤
- 휴학
- androidstudio
- 다시풀기
- Python
- Matrix Factorization
- 컴퓨터비전
- WebOS
- git
- D3
- 대학원일기
- java
- level1
- 대학원
Archives
- Today
- Total
bit가 눈 앞에서 왔다갔다
이코테_BFS, DFS) Q19 연산자 끼워 넣기 본문
책 349쪽
풀지 못했으니까 바로 정답 소스
*정답 소스
num = int(input())
data = list(map(int, input().split()))
add, sub, mul, div = map(int, input().split())
min_value = 1e9
max_value = -1e9
def dfs(i, now): # 위치, 현재 값
global min_value, max_value, add, sub, mul, div
if i == num: # 모든 연산자를 사용했을 때
min_value = min(min_value, now)
max_value = max(max_value, now)
else:
if add > 0:
add -= 1 # + 수 차감
dfs(i+1, now + data[i]) # 연산자를 모두 사용했을 때 나옴
add += 1 # + 복구, 위에서 나온 뒤 sub로 내려감
if sub > 0:
sub -= 1
dfs(i+1, now - data[i])
sub += 1
if mul > 0:
mul -= 1
dfs(i+1, now * data[i])
mul += 1
if div > 0:
div -= 1
dfs(i+1, int(now/data[i]))
div += 1
dfs(1, data[0])
print(max_value)
print(min_value)
-아직 문제를 많이 풀어본 건 아니지만 dfs, bfs를 어떻게 적용해야 할지 감이 잘 안 온다
내 접근:
1. 연산자도 list형으로 받아서 bfs를 사용하면서 큐에 순서를 섞어서 넣어야겠다. -> 순서 섞으려면 반복문 오지게 돌렸겠지
1-2. 연산자 수를 입력받으니까, 연산자로 바꿔서 넣어줘야겠네
1-2-1. 이차원 리스트 등장..ㅎ
2. ..? 이러면 연산자 list... bfs를..???
-> 이렇게 사고가 산으로 열심히 가고 있었다.
정답 소스의 접근:
연산자에 대해 재귀(dfs)를 이용해서 완전 탐색 수행 (아주 단순,,)
피드백:
재귀에 대한 개념도 추가적으로 볼 필요가 있음
+디버거 너무 좋다
반응형
'Algorithm > Prob' 카테고리의 다른 글
Py) 프로그래머스 49189 (0) | 2021.12.31 |
---|---|
Py) 프로그래머스 42839 (0) | 2021.12.28 |
프로그래머스) 42586 (0) | 2021.09.03 |
프로그래머스) 42748 (0) | 2021.09.02 |
7576 토마토 - 방법1 (0) | 2019.11.16 |
Comments