Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 브루트포스
- OS
- 코딩
- vector
- 오에스
- 그래프
- 알고리즘
- cs
- 구현
- bfs
- 스택
- 컴공과
- Operating System
- 컴퓨터공학과
- 정석
- 오퍼레이팅시스템
- 너비우선탐색
- DP
- 백준
- c++
- coding
- 정석학술정보관
- 코테
- Stack
- 문제풀이
- 컴공
- 자료구조
- 개발
- 북리뷰
- Computer science
Archives
- Today
- Total
Little Jay
[C++] 백준 2670 - 연속부분최대곱(with setprecision) 본문
DP가 하도 어려워서 요새 DP를 집중적으로 공부하고 있다.
그 와중에 조금 어이없는(?) 문제를 발견해서 풀이를 올리고자 한다.
위 문제는 어떤 실수 형태의 배열에서 연속되는 구간의 곱의 최대값을 출력하는 문제이다.
이를 간단하게 구성을 construct해보면
어떤 배열이 자기 자신으로 초기화 된 후에, 그 0번 인덱스의 것을 제외하고 1번 인덱스부터 자기 자신과 그 전에 있는 것의 곱의 대소 비교를 통해서 누적곱을 구할 수 있다.
이렇게 업데이트 시켜 주면서 최대값을 찾아주면 정답인데,
C++를 하는 사람들은 당연히 setprecision 메서드를 사용했을 것이다.
문제는 이렇게 하면 정답이 아니다.
문제에서 요구한 것은 어떤 값들이 들어와도 소수 3번째 자리수까지 출력하는 것이다.
정수값을 setprecision을 하면 그냥 소수 출력 없이 그냥 출력되므로
printf("%.3lf", ans); 이런식으로 출력할 수 있도록 하자.
그러나 이렇게 되면 cout.tie(0)등의 C++의 cout, cin의 입출력속도 향상을 위한 코드를 사용하지 말아야한다.
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
int n;
double dp[10001] = { 0.0, };
double ans = 0;
int main() {
cin >> n;
vector<double> v(n);
for (auto& i : v) cin >> i;
dp[0] = v[0];
for (int i = 1; i < n; i++) {
dp[i] = max(v[i], v[i] * dp[i - 1]);
ans = max(ans, dp[i]);
}
printf("%.3lf", ans);
return 0;
}
'알고리즘 > BOJ' 카테고리의 다른 글
[C++] 백준 16964번 - DFS 스페셜 저지 (0) | 2022.11.30 |
---|---|
[C++] 백준 11660번 - 구간 합 구하기5 (0) | 2022.11.29 |
[C++] 백준 20291번 - 파일 정리 (0) | 2022.09.27 |
[C++] 백준 14938번 - 서강그라운드 (0) | 2022.09.24 |
[C++] 백준 11725번 - 트리의 부모 찾기 (0) | 2022.09.22 |
Comments