자료구조 및 알고리즘/백준
[백준 2869] 달팽이는 올라가고 싶다
아기사우르스
2023. 4. 3. 01:29
728x90
이 코드의 문제점
2^23승까지 하고 멈춘다.
#include <iostream>
using namespace std;
int main(void){
int a,b,v;
cin>>a>>b>>v;
int len=0;
// 반올림 써야하나
float day=1;
while(len<v){
len+=a;
day+=0.5;
if(len>=v){
cout<<(int)day;
return 0;
}
len-=b;
day+=0.5;
}
}
어디서 자료형의 범위가 부족했는지 모르겠지만 long long과 double로 대체해준다.
#include <iostream>
using namespace std;
int main(void){
ios::sync_with_stdio(0);
cin.tie(0);
long long a,b,v;
cin>>a>>b>>v;
long long len=0;
double day=1;
while(len<v){
len+=a;
day+=0.5;
if(len>=v){
cout<<(long long)day;
return 0;
}
len-=b;
day+=0.5;
}
}
이거 cin.tie(0); 해도 시간 초과나서 바꿔준다.
다음 글 참고한다.
정답 코드는
#include <iostream>
using namespace std;
int main() {
int A, B, V;
int answer;
cin >> A >> B >> V;
//하루만에 올라갈 수 있을 때
if(V <= A) answer = 1;
else{
V -= A;
if(V % (A - B)) answer = V / (A - B) + 2;
else answer = V / (A - B) + 1;
}
cout << answer;
}
728x90