일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 9095번
- 1038번
- 빛의 경로 사이클
- 백준 알고리즘
- SW Expert Academy
- 파이썬
- 경주로 건설
- 보석 쇼핑
- HTML 기초
- 12869번
- 스타트 택시
- 수식 최대화
- 17144번
- 미세먼지 안녕!
- 16234번
- 15686번
- python
- 19238번
- 어른 상어
- 감소하는 수
- 거울 설치
- 14499번
- 12865번
- SW ExpertAcademy
- 베스트엘범
- 2020 카카오 인턴십
- 1789번
- QueryDSL 기초
- 프로그래머스
- 키패드 누르기
Archives
- Today
- Total
보물창고 블로그
SW Expert Academy 4008. [모의 SW 역량테스트] 숫자 만들기 풀이 With Python 본문
알고리즘 풀이/SW Expert Academy
SW Expert Academy 4008. [모의 SW 역량테스트] 숫자 만들기 풀이 With Python
홋 메 2020. 3. 26. 14:14728x90
이 문제를 bfs(너비 우선 탐색) 방법으로 해결하였는데, 문제를 풀고 나서 다시 생각해보니 dfs(깊이 우선 탐색) 방법이 메모리 측면에서 더 효율적일 것 같다는 생각이 들었다. 먼저 bfs로 풀면 deepcopy를 이용하여 모든 case의 tool을 복사하여야 하므로 시간과 메모리 측면에서 비효율적이다. 나의 풀이는 아래와 같다.
from collections import deque
from copy import deepcopy
def solution(n, numbers, tools):
maxi = -float('inf')
mini = float('inf')
queue = deque()
# 더하기 빼기 곱하기 나누기
queue.append([0, numbers[0], tools])
while queue:
count, sub, tool = queue.popleft()
if count == n - 1:
if maxi < sub:
maxi = sub
if mini > sub:
mini = sub
else:
if tool[0] > 0:
tool2 = deepcopy(tool)
tool2[0] -= 1
queue.append([count + 1, sub + numbers[count + 1], tool2])
if tool[1] > 0:
tool2 = deepcopy(tool)
tool2[1] -= 1
queue.append([count + 1, sub - numbers[count + 1], tool2])
if tool[2] > 0:
tool2 = deepcopy(tool)
tool2[2] -= 1
queue.append([count + 1, sub * numbers[count + 1], tool2])
if tool[3] > 0:
tool2 = deepcopy(tool)
tool2[3] -= 1
if (sub > 0 and numbers[count + 1] < 0) or (sub < 0 and numbers[count + 1] > 0):
sub2 = -(abs(sub) // abs(numbers[count + 1]))
else:
sub2 = sub // numbers[count + 1]
queue.append([count + 1, sub2, tool2])
return abs(maxi - mini)
t = int(input())
for test in range(1, t + 1):
n = int(input())
tool3 = list(map(int, input().split()))
number3 = list(map(int, input().split()))
ans = solution(n, number3, tool3)
print('#{} {}'.format(test, ans))
'알고리즘 풀이 > SW Expert Academy' 카테고리의 다른 글
SW Expert Academy 5656. [모의 SW 역량테스트] 벽돌 깨기 풀이 With Python (0) | 2020.03.26 |
---|---|
SW Expert Academy 5658. [모의 SW 역량테스트] 보물상자 비밀번호 풀이 With Python (0) | 2020.03.26 |
SW Expert Academy 4012. [모의 SW 역량테스트] 요리사 풀이 With Python (0) | 2020.03.26 |
SW Expert Academy 2117. [모의 SW 역량테스트] 홈 방범 서비스 풀이 With Python (0) | 2020.03.26 |
SW Expert Academy 2105. [모의 SW 역량테스트] 디저트 카페 풀이 With Python (0) | 2020.03.26 |
Comments