shinbian11   3년 전

곱하고자 하는 수들 중 0이 있어서 곱도 0이 었을때, 그 0을 다른 수로 바꿨을때 곱도 0이 아닌 다른 수로 동시에 처리해주는 예외처리까지도 해줬습니다.

근데 자꾸 4%에서 틀리는 이유는 뭔가요? 제가 빠뜨린 예외처리가 있나요?

최대한 자료형들도 맞추려고 노력했습니다. 문제 테스트케이스 넣어보면 그건 다 맞게 나오더라고요.

감사합니다

harinboy   3년 전

먼저 오버플로우가 충분히 일어날 수 있을 것 같습니다.

1,000,000이 1,000,000개 있는 배열의 경우 세그먼트 트리의 루트 노드는 10^(6x10^6)의 정보를 담아야합니다. (10^6)x(10^6)이 아닙니다.

구간합이 0일 경우 무조건 1을 더해주는 것이 이해가 가지 않습니다. 1 2 0 4의 구간 곱은 0인데, 이 중 4를 8로 바꿔도 구간 곱은 여전히 0입니다.

double을 쓰는 것은 별로 좋은 생각이 아닌 것 같습니다. 정수형-실수형 변환 과정에서 정확도를 장담할 수 없습니다. (이 문제로 꼭 틀리는지는 모르겠습니다.)

업데이트 과정 중 자식 노드가 있는 경우 두 자식노드를 업데이트 한 후의 값으로 현재 노드의 값을 다시 계산하는 것이 훨씬 좋을 것 같습니다.

댓글을 작성하려면 로그인해야 합니다.