인프런 커뮤니티 질문&답변

한유태님의 프로필 이미지
한유태

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

6-L

6-L 질문있습니다 :)

해결된 질문

작성

·

47

·

수정됨

0

안녕하세요 선생님 🙂

맞왜틀에 자꾸 걸리는거 같습니다 ㅠㅠ 테스트케이스도 맞고 생각도 꽤 많이 하고 조건을 체크했다고 생각하는데 자꾸 틀리니 스트레스가 이만저만이 아니네요 ㅠㅠ

 

이번 아이디어는 누적합을 기반으로 풀이하였습니다. 뺄셈을 하는 대신 나눗셈을 하면 될 것이라 판단하였구요, arr[0]의 값을 1.0으로 설정하였습니다.

 

또한, 연속된 수의 곱이니 곱연산이 일어나지 않는 경우는 2중 for문에서 j < i - 1로 처리해주었습니다.

http://boj.kr/c016e1a3b9d54cb487564acfe350c3d4

 

앞에서 드리는 질문들도 계속해서 맞왜틀인걸로 미루어보았을 때, 제가 무언가 생각을 잘못하고 있는걸까요?

답변 1

1

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 유태님 ㅎㅎ

로직은 괜찮습니다.

다만, 실수형이기 때문에 곱하고 -> 나누기를 하면서 실수형 오차 때문에 틀리다고 뜨는 것 같습니다.

스크린샷 2024-09-07 오후 2.37.03.png

 

저도 많이 시도해봤는데 틀렸다고 뜹니다.

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점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

 

한유태님의 프로필 이미지
한유태

작성한 질문수

질문하기