일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 전문가를 위한 파이썬
- Fast API
- docker
- fluent python
- Ethereum
- 코어 이더리움 프로그래밍
- 블록체인
- guru
- dockerfile
- Network
- 이더리움
- Thread
- 알고리즘
- Python
- BAEKJOON
- 동시성
- Kubernetes
- IMAGE
- Container
- 백준
- rust
- 플랫폼
- Algorithm
- 러스트
- AWS
- function
- Refactoring
- RabbitMQ
- BlockChain
- 파이썬
Archives
- Today
- Total
글쓰기 | 방명록 | 관리 |
Victoree's Blog
1660_캡틴 이다솜 본문
728x90
Concept & Idea
1 3 6 10의 수열을 만들고, 1 4 10 20의 수열을 만드는 것은 쉬운 작업이었다. 처음에는 30만 * 30만은 거뜬할거라 생각했는데, 생각해보니까 시간초과가 날 수 밖에 없었다. 사면체 배열의 수 * 30만 만큼만 비교하면 문제를 더 빠르게 해결할 수 있다.
Code
#include <iostream>
#include <vector>
using namespace std;
int n;
long long layer[200];
vector<long long> vec;
long long dp[300001];
int main(){
cin>>n;
for(int i=1; i<=n; i++)
dp[i]=i;
long long i=1;
layer[1]=1;
vec.push_back(layer[1]);
while(true) {
layer[i+1]+=i+1+layer[i];
if(layer[i+1]+vec[i-1]<=n) {
vec.push_back(layer[i+1]+vec[i-1]);
dp[vec[vec.size()-1]]=1;
}
else
break;
i++;
}
for(int i=1; i<=n; i++) {
for(int j=0; j<vec.size(); j++) {
if(i<vec[j])
break;
dp[i]=min(dp[i],dp[i-vec[j]]+1);
}
}
cout<<dp[n]<<endl;
}
Fealing
중간에 배열을 벡터로 바꿨더니 런타임에러로 많이 고생하였다. 원래 짜던 스타일과 조금 다르게 짰더니, 코드가 점점 더러워져서 계속 제자리 걸음을 걷다가 정신을 좀 차리고 다시 봤더니 그나마 간결하게 문제를 풀 수 있었다. 인덱스를 좀 더 깔끔하게 사용하도록 하자!
728x90
'Algorithm > 2019~2020' 카테고리의 다른 글
2169-로봇 조종하기 (0) | 2021.04.23 |
---|---|
11049-행렬 곱셈 순서 (0) | 2021.04.22 |
14003_가장 긴 증가하는 부분 수열5 (0) | 2021.04.22 |
12738_가장 긴 증가하는 부분 수열3 (0) | 2021.04.22 |
1915_가장 큰 정사각형 (0) | 2021.04.22 |
Comments