일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 이더리움
- Algorithm
- 동시성
- 파이썬
- Container
- BlockChain
- IMAGE
- guru
- BAEKJOON
- 백준
- 코어 이더리움 프로그래밍
- AWS
- Fast API
- rust
- fluent python
- 알고리즘
- 블록체인
- 플랫폼
- Refactoring
- Kubernetes
- function
- docker
- dockerfile
- 러스트
- Python
- Network
- Thread
- RabbitMQ
- 전문가를 위한 파이썬
- Ethereum
Archives
- Today
- Total
글쓰기 | 방명록 | 관리 |
Victoree's Blog
1912_연속합 본문
728x90
Concept & Idea
연속합이라고해서 투포인터 개념을 이용해 문제를 해결하려 했는데, 그냥 간단한 이중 포문으로 해결하였다.
처음엔 아무 조건없이 이중포문으로만 해결하니, 시간초과를 마주하였는데 간단한 res<dp[i] 조건을 통해 해결할 수 있었다.
이전에 기록된 DP[j-1]배열의 누적 합과 현재 자기 자신을 더한 값, DP[j]를 비교하여 문제를 해결 할 수 있었다.
여태 풀었던 DP문제들은 입력되는 수가 양수만 들어와서, 입력으로 음수가 들어오는 이 문제를 DP배열을 입력으로 초기화해놓음으로 해결 할 수 있었다.
5 -1 -1 -1 -1 -1
위와 같은 예시를 통해, 예외를 알아낼 수 있었다.
Code
#include <iostream>
using namespace std;
int n;
int map[100001];
int dp[100001];
int res=-1001;
int main() {
cin>>n;
for(int i=1; i<=n; i++) {
cin>>map[i];
dp[i]=map[i];
}
for(int i=1; i<=n; i++) {
if(res<dp[i]) {
for(int j=i; j<=n; j++) {
if(dp[j]<dp[j-1]+map[j])
dp[j]=dp[j-1]+map[j];
if(res<dp[j])
res=dp[j];
}
}
}
cout<<res<<endl;
}
Fealing
검사할 필요 없는 요소를 체크하여 시간을 줄여나가야 하는 것이 중요한 것 같다.
또한 입력받는 수의 범위가 음수도 가능하기에, 한번 더 생각해보아야 하는 문제였다.
728x90
'Algorithm > 2019~2020' 카테고리의 다른 글
2133_타일 채우기 (0) | 2021.04.22 |
---|---|
1699_제곱수의 합 (0) | 2021.04.22 |
11055_가장 큰 증가 부분 수열 (0) | 2021.04.22 |
9465_스티커 (0) | 2021.04.22 |
2193_이친수 (0) | 2021.04.22 |
Comments