Notice
Recent Posts
Recent Comments
Link
코딩 공부
[Python](DFS) 백준 14888번 : 연산자 끼워넣기 본문
728x90
<접근 방법>
- 덧셈, 뺄셈, 곱셈, 나눗셈 연산자의 개수를 받아서 사용할 때마다 하나씩 빼는 형태로 calc 함수를 만들어야겠다.
- 주어진 "수열의 숫자 개수"는 "연산자의 개수 + 1"이므로 calc안에서 number_lst[n+1]을 이용한다.
- 나눗셈을 할 때에는 문제에 쓰여있는대로 유의해서 로직을 짠다(음수를 양수로 나눌 때).
# 예제 3번
def calc(n, pl, mi, mu, di, result):
global max_ans, min_ans
if n == N-1: # 모든 연산자를 사용했다면
max_ans = max(max_ans, result) # 최댓값 갱신
min_ans = min(min_ans, result) # 최솟값 갱신
return
if pl: # 사용할 수 있는 덧셈 연산자가 남아있을 경우
calc(n+1, pl-1, mi, mu, di, result+number_lst[n+1])
if mi: # 사용할 수 있는 뺄셈 연산자가 남아있을 경우
calc(n+1, pl, mi-1, mu, di, result-number_lst[n+1])
if mu: # 사용할 수 있는 곱셈 연산자가 남아있을 경우
calc(n+1, pl, mi, mu-1, di, result*number_lst[n+1])
if di: # 사용할 수 있는 나눗셈 연산자가 남아있을 경우
if result < 0: # 음수를 양수로 나눌 때
calc(n+1, pl, mi, mu, di-1, -(abs(result)//number_lst[n+1]))
else: # 그 외
calc(n+1, pl, mi, mu, di-1, result//number_lst[n+1])
N = int(input())
number_lst = list(map(int, input().split()))
plus, minus, mul, div = map(int, input().split())
max_ans, min_ans = -1000000000, 1000000000
calc(0, plus, minus, mul, div, number_lst[0]) # calc(0, 2, 1, 1, 1, 1)
print(max_ans)
print(min_ans)
<틀렸던 이유>
보통, 여러 언어를 사용하다보면 최댓값과 최솟값을 임의로 1e9, -1e9로 나타내는 경우가 많아서
max_ans, min_ans = -1e9, 1e9로 했었는데 틀렸었다.
1e9, -1e9를 출력해보면 소숫점이 포함된 실수로 표기되기에 계산에 차질이 생겼던 것이다.
그래서 문제에 나와있는 그대로 10억, -10억으로 쓰는 게 맞다.
이해가 안되는 부분이 있으면 질문 주세요. 감사합니다.
728x90
'삼성 SW 역량 테스트 기출 문제' 카테고리의 다른 글
[Python](구현, 조합) 백준 15685번 : 치킨 배달 (0) | 2024.01.18 |
---|---|
[Python](구현) 백준 14891번 : 톱니바퀴 (0) | 2024.01.18 |
[Python](구현) 백준 14503번 : 로봇 청소기 (0) | 2024.01.17 |
[Python](DFS) 백준 14889번 : 스타트와 링크 (0) | 2024.01.15 |
[Python](DFS) 백준 14501번 : 퇴사 (2가지 방법) (0) | 2024.01.15 |