[02869]カタツムリが行きたがっている
[02869]我去了卡塔茨姆里
質問する
地面にカタツムリがいます.このカタツムリはVメートルの棒に登る.
カタツムリは昼にAメートルも上がる.でも、夜寝るとBメートル滑る.また、山頂に登ると滑ることはありません.
カタツムリはすべての棒に登るので、何日かプログラムを作ってください.
入力
1行目には3つの整数A,B,Vがあり、スペースで区切られています.(1 ≤ B < A ≤ V ≤ 1,000,000,000)
しゅつりょく
最初の行の出力カタツムリは木の棒を登って何日かかりますか.
コード#コード#
#include <iostream>
using namespace std;
int main() {
int A, B, V, day;
scanf("%d %d %d", &A, &B, &V);
/*** 시간 초과 풀이 (식으로 풀지 않고 loop를 사용해 풀이) ***
// 첫 날 올라감
day = 1;
height = A;
// 마지막 밤에 미끄러지 않는 것을 고려해 밤부터 count 시작
while(height < V) {
height += (A - B); // 밤 ~ 다음날 낮 올라간 높이 더함
day++;
}
**********************************************************/
/* 문제 풀이 */
// 마지막 날엔 A만큼 올라가면 떨어지지 않으므로,
// 매일 (A - B)만큼 (V - A) 이상 오면 됨
// --> (V - A) / (A - B)
// 단, 이 때 딱 떨어지지 않는 경우
// 즉, (V - A) % (A - B)에 나머지가 발생하는 경우 하루를 더해줌
// --> ((V - A) % (A - B) == 0)? 0 : 1
// 마지막 날 A만큼 올라가는 하루 더해줌
// --> day += 1
day = (V - A) / (A - B) + (((V - A) % (A - B) == 0)? 0 : 1) + 1;
printf("%d\n", day);
}
追加の説明
前述の解答は簡単な式を確立するのではなく,O(N)に必要なloopを用いて解き,問題の時間は0.15秒に制限し,loopを用いる場合,数字が大きい場合はタイムアウトに設定した.
そこでloopの過程をまとめ,一つの方法で表現した.
ソース:https://www.acmicpc.net/problem/2869
Reference
この問題について([02869]カタツムリが行きたがっている), 我々は、より多くの情報をここで見つけました https://velog.io/@kkoala/02869-달팽이는-올라가고-싶다テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol