Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- spring cloud
- MSA
- 파이썬
- java
- Kotlin
- Spring Boot
- 백준 19238
- Spring
- 백준
- 백준 17779
- 웹어플리케이션 서버
- spring security
- re.split
- with recursive
- 백준 17626
- 프로래머스
- spring oauth
- JVM
- sql 기술면접
- springboot
- 백준 16719
- 백준 16236
- 백준 16235
- JPA
- 백준 파이썬
- 백준 15685
- Coroutine
- MySQL
- 프로그래머스
- java 기술면접
Archives
- Today
- Total
시작이 반
[백준] 14888번(python 파이썬) 본문
SMALL
연산자에 대한 백트래킹 문제이다.
사실 푸는법은 바로 떠올라서 금방 풀었지만 정답이 제대로 나오지 않았다..
몇시간 동안 디버깅을 한 결과
음수 // 양수 를 하면 정수로 변환되는데 이때 내림을 해서 변환하는거 같다..
-1//3 결과가 -1로 나왔음...
-2//3 결과도 -1로 나옴
풀이
연자를 확인하면서 재귀를 실행한다.
중복해서 연산자가 있을경우 해당 연산자에 대해서 한번만 실행해도된다. 처음에 중복해서 실행하니까 실행 시간이 오래 걸렸다...
처음 풀이
n = int(input())
number = list(map(int, input().split()))
operator = list(map(int, input().split()))
result_max = -1e9
result_min = 1e9
def BackTrack(index, start):
global result_max, result_min
if index == n - 1:
result_max = max(start, result_max)
result_min = min(start, result_min)
return
for i in range(4):
if operator[i % 4] == 0:
continue
for _ in range(operator[i % 4]): #해당 연산자가 여러개있을 경우 중복실행인데 없어도된다 생각해보니...
operator[i % 4] -= 1
BackTrack(index + 1, Operator(start, number[index + 1], i % 4))
operator[i % 4] += 1
def Operator(x, y, oper):
if oper == 0:
return x + y
elif oper == 1:
return x - y
elif oper == 2:
return x * y
else:
if x < 0:
result = (-x) // y
return -result
else:
return x // y
BackTrack(0, number[0])
print(result_max)
print(result_min)
최적화
n = int(input())
number = list(map(int, input().split()))
operator = list(map(int, input().split()))
result_max = -1e9
result_min = 1e9
def BackTrack(index, start):
global result_max, result_min
if index == n - 1:
result_max = max(start, result_max)
result_min = min(start, result_min)
return
for i in range(4):
if operator[i % 4] == 0:
continue
operator[i % 4] -= 1
BackTrack(index + 1, Operator(start, number[index + 1], i % 4))
operator[i % 4] += 1
def Operator(x, y, oper):
if oper == 0:
return x + y
elif oper == 1:
return x - y
elif oper == 2:
return x * y
else:
if x < 0:
result = (-x) // y
return -result
else:
return x // y
BackTrack(0, number[0])
print(result_max)
print(result_min)
LIST
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 6603번(python 파이썬) (0) | 2021.02.03 |
---|---|
[백준] 14889번(python 파이썬) (1) | 2021.02.03 |
[백준] 2580번(python 파이썬) (2) | 2021.01.29 |
[백준] 9663번(python 파이썬) (0) | 2021.01.28 |
[백준] 15657번(python 파이썬) (0) | 2021.01.10 |