DFS로 해결할 수 있는 문제이다.
최소/최대값을 구하는 연산자의 순서에 뭔가 규칙이 있을 거라 생각해서 이리저리 생각하다가, 결국 DFS로 해결한 문제이다. DFS로 최대/최소값을 업데이트하면서 모든 경우의 수를 다 구하면 크게 머리쓰지 않고 해결할 수 있다.
난 maxValue를 왜 -1e9로 하는지 이해가 안됐었다. 1e9도 아니고 왜 작은 값으로 하는지 몰랐었는데, maxValue값을 업데이트할 때 어떤 값이 오든 첫 값은 maxValue가 되는데 애매한 값이 maxValue에 초기화되어 있으면 여기서 문제가 생길 수 있기 때문이었다. 문제에서 제시된 수의 최대/최소값이 10억~-10억이기 때문에 -1e9, 1e9로 초기화하는 것이다.
물론 반드시 이 값으로 초기화 해야하는 것은 아니다. 약간 관례적인 이유도 있다.
단 두가지 신경쓸 점이 있는데, 나누기 연산을 할 때 꼭 int(calc / numList[i]) 이렇게 해야 한다.
calc // numList[i]를 하면 생기는 문제가, // 연산은 "내림"을 하기 때문에 음수일 경우 값에 오차가 생긴다.
예를 들어 -7 나누기 2 일 경우
int(-7 / 2) -> -3
-7 // 2 -> -4
이렇게 값이 차이난다. 결국 -3.5에서 처리를 어떻게 하느냐의 차이인데, int는 -3.5에서 뒤를 아예 떼고 -3을 만들지만 // 연산은 -3.5에서 더 낮은 값으로 "내림"하여 -4를 만들어 버린다.
또 마지막에 출력할 때 int를 붙여주지 않으면 틀렸습니다 라고 뜬다. 이유는 모른다. 테스트 케이스는 전부 통과했지만 제출하면 문제가 생겨서 꼭 int를 붙여줘야 한다.
'Algorithm > BackTracking' 카테고리의 다른 글
[Baekjoon 2529 / Python / 실버1] 부등호 (0) | 2024.08.06 |
---|---|
[Baekjoon 14650 / Java / 실버2] 걷다보니 신천역 삼 (Small) (0) | 2024.05.16 |
[Baekjoon 18429 / Java / 실버3] 근손실 (0) | 2024.05.04 |
[Baekjoon 1182 / python / 실버2] 부분수열의 합 (0) | 2024.03.28 |
[Baekjoon 9663 / python / 골드4] N-Queen (2) | 2024.03.23 |