백준 2869번 문제(달팽이는 올라가고 싶다) C++로 풀기

doctorsohn·2021년 1월 24일
0

백준

목록 보기
3/16

2869번 달팽이는 올라가고 싶다 링크


문제 요약

주어진 길이를 전부 올라가는데 걸리는 시간을 출력한다.


코드

#include <iostream>

using namespace std;

int main()
{
  int input[3]; // 입력
  for(int i=0;i<3;i++)
  {
    cin >> input[i];
  }
  int day=(input[2]-input[0])/(input[0]-input[1]);  // 마지막 날 전까지 소요되는 날들
  if(((input[2]-input[0])%(input[0]-input[1]))) // day가 정수가 아니라면 하루 더 써야 함
  {
    day+=1;
  }
  cout << day +1; // 마지막 날 더하기
}

풀이

막대를 올라가는 최종적인 날을 제외하고, 첫날부터 마지막 날 직전의 날까지를 우선 구한다.
이렇게 하는 이유는 마지막 날에 정상에 다다르면 미끄러지지 않고 그대로 끝나기 때문이다.

int day=(input[2]-input[0])/(input[0]-input[1]);

올라가야 하는 길이에서 낮마다 올라갈 수 있는 길이를 빼고, 하루마다 올라갈 수 있는 길이(낮에 올라간 길이-밤에 미끄러지는 길이)로 나누어 첫날부터 마지막 날 전까지 며칠이 소모되는지 구한다.
그런데 앞서 구한 날짜가 정수면 상관없지만, 정수가 아니라면 하루를 더 소모해야 해야 하니 날짜에 1을 더한다.
최종적으론 마지막 날도 포함해 1을 더해 출력한다.


주의점

구한 날짜가 정수가 아니면 하루를 더 소모해야 한다.

profile
하고싶은일하는게이머

0개의 댓글