[백준 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); 해도 시간 초과나서 바꿔준다.

다음 글 참고한다.

https://wonsang98.tistory.com/entry/%EB%B0%B1%EC%A4%80-2869%EB%B2%88-%EB%8B%AC%ED%8C%BD%EC%9D%B4%EB%8A%94-%EC%98%AC%EB%9D%BC%EA%B0%80%EA%B3%A0-%EC%8B%B6%EB%8B%A4-C

 

백준 2869번: 달팽이는 올라가고 싶다 [C++]

https://www.acmicpc.net/problem/2869 2869번: 달팽이는 올라가고 싶다 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) www.acmicpc.net 코드 #include using namespace std; int mai

wonsang98.tistory.com

 

정답 코드는

#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

'자료구조 및 알고리즘 > 백준' 카테고리의 다른 글

[백준 9663] N-Queen  (0) 2023.04.06
[백준 15649] N과 M (1)  (0) 2023.04.06
[백준 2752] 세수정렬  (0) 2023.04.02
[백준 10817] 세 수  (0) 2023.04.02
[백준 1929] 소수 구하기  (0) 2023.04.01