해결된 질문
작성
·
47
·
수정됨
0
안녕하세요 선생님 🙂
맞왜틀에 자꾸 걸리는거 같습니다 ㅠㅠ 테스트케이스도 맞고 생각도 꽤 많이 하고 조건을 체크했다고 생각하는데 자꾸 틀리니 스트레스가 이만저만이 아니네요 ㅠㅠ
이번 아이디어는 누적합을 기반으로 풀이하였습니다. 뺄셈을 하는 대신 나눗셈을 하면 될 것이라 판단하였구요, arr[0]의 값을 1.0으로 설정하였습니다.
또한, 연속된 수의 곱이니 곱연산이 일어나지 않는 경우는 2중 for문에서 j < i - 1로 처리해주었습니다.
http://boj.kr/c016e1a3b9d54cb487564acfe350c3d4
앞에서 드리는 질문들도 계속해서 맞왜틀인걸로 미루어보았을 때, 제가 무언가 생각을 잘못하고 있는걸까요?
답변 1
1
안녕하세요 유태님 ㅎㅎ
로직은 괜찮습니다.
다만, 실수형이기 때문에 곱하고 -> 나누기를 하면서 실수형 오차 때문에 틀리다고 뜨는 것 같습니다.
저도 많이 시도해봤는데 틀렸다고 뜹니다.
2중 for문으로 푸신다면 다음 코드처럼 곱하는 것으로 푸시면 됩니다.
#include <bits/stdc++.h>
using namespace std;
double go(const vector<double>& nums) {
int n = nums.size();
double mx = -1e9;
for (int start = 0; start < n; ++start) {
double curr = 1.0;
for (int end = start; end < n; ++end) {
curr *= nums[end];
mx = max(mx, curr);
}
}
return mx;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
int n;
cin >> n;
vector<double> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
double ret = go(nums);
cout << fixed << setprecision(3) << ret << "\n";
return 0;
}
앞에서 드리는 질문들도 계속해서 맞왜틀인걸로 미루어보았을 때, 제가 무언가 생각을 잘못하고 있는걸까요?
-> 괜찮습니다. 잘 하고 계십니다.
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.