have to do_yeon
[백준 / C++] 2869. 달팽이는 올라가고 싶다 본문
https://www.acmicpc.net/problem/2869
2869번: 달팽이는 올라가고 싶다
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
www.acmicpc.net
처음에 단순하게 반복문을 사용하여 돌려봤더니 시간초과가 떴다. 그래서 수식을 사용하여 해결하는 방법을 생각했다.
생각해야할 중요한 부분이 있다.
달팽이가 정상에 도달할 때 딱 맞춰서 정상에 도착해서 낮에 끝나는지, 아니면 아쉽게 도달하지 못하여 밤을 한 번 지내고 그 다음날 낮에 도달하는지이다.
나는 이 부분을 달팽이가 다음날을 마지막 날로 하여 정상에 갈 수 있는지, 아니면 하루가 더 필요한지를 나머지를 이용하여 확인하였다.
자세한 설명은 주석으로 첨부해놓았다.
제출 답안
#include <iostream>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int A, B, V;
cin>> A >> B >> V;
if (A == V){ // 만약 올라가야되는 거리가 낮에 달팽이 갈 수 있는 거리와 같다면
cout<< 1; // 하루만에 갈 수 있음
return 0;
}
int day, length = A - B; // 낮과 밤동안 갈 수 있는 거리
// (V - A) 그 거리까지 오면 무조건 다음날 달팽이는 도착
if ((V - A) % length){ // (V - A)의 거리까지 가는데 걸리는 시간을 구할때 정수가 안나오면 하루 더 추가
day = ((V - A) / length) + 1 + 1;
}
else{
day = (V - A) / length + 1; // 정상에 도달하려면 하루가 더 걸림
}
cout<< day;
}
'C++ > Baekjoon (C++)' 카테고리의 다른 글
[백준 / C++] 10814. 나이순 정렬 (0) | 2022.08.27 |
---|---|
[백준 / C++] 7568. 덩치 (0) | 2022.08.27 |
[백준 / C++] 1978. 소수 찾기 (0) | 2022.08.20 |
[백준 / C++] 1436. 영화감독 숌 (0) | 2022.08.20 |
[백준 / C++] 1181. 단어 정렬 (0) | 2022.08.20 |
Comments