Post
달팽이는 올라가고 싶다 성공다국어
문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
출력
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
풀이
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int a, b, v, day;
cin >> a >> b >> v;
int minus = a - b;
day = (v - a) % minus;
if (day == 0)
day = (v-a)/minus +1;
else
day = (v - a) / minus + 2;
cout << day;
}
v(전체높이) 에다가 a(한번 올라갈때의 높이)를 빼준것에다가
하루동안 갈 수 있는 높이를 %해준다면
최종도착 바로 전 상황(바로전날)을 바탕으로 거리를 계산해준다.
%해주었을때 0이라면 최종도착전날까지 계산했을때 남는거리가 없다라는뜻이다.
하지만 우린 최종도착전날까지의 거리를 계산한것이므로 한번 더 가야하기때문에 +1을 해줘야한다.
그러나 %해주었을때 0이 아니라면 최종도착전날인데도 불구하고 아직 거리가 남아있단 뜻이다.
그러므로 최종도착날짜 (+1)에다가 남은 거리까지(+1)을 해줘야하기에 +2를 해준다.
날짜는 (v-a)/minus를 통해 최종도착 전날까지를 계산하고 여기에다가 최종도착날까지를 계산해서 +1을 해주는데,
남은거리가 존재한다면 +1을 한번 더 해주어 +2를 해준다.
내가 대학교1학년때 풀었던 문제.. 그 당시에는 for문을 돌려 하루하루를 계산했다.
#include<stdio.h>
int main() {
int a, b, v, day;
scanf("%d %d %d", &a, &b, &v);
for (day = 1; ; day++) {
v -= a;
if (v <= 0)
break;
v += b;
}
printf("day = %d", day);
}
지금보니까 너무 부끄러운데.. 아무튼 정말 직관적으로 아 하루하루 날을 세면 되겠구나! 라고 생각을 하고 더하고 빼고 했던것같다 ㅎㅎㅎ;; 너무 부끄럽지만 그 당시에는 코딩에 익숙치못해서 그랬던것같다.
한 두번정도 틀리니까 와 이문제는 어려운거구나! 라는 생각에 시도를 하지않기도했고
지금 다시 풀어봤을때도 괜히 어렵게 꼬아서 생각을 했던것같다.
다시보니까 빙구같다...귀엽기도하고..안타깝기도하고..부끄럽네...
그래도 과거 틀렸습니다에 머무르지않고 맞았습니다로 극복했기에 이렇게 블로그에다가도 쓴다! 뿌듯하다!!😁✨
'STUDY > 코딩문제' 카테고리의 다른 글
[백준 11724] 연결 요소의 개수 C++풀이/해결 (0) | 2022.09.07 |
---|---|
[백준 7576] 토마토 C++풀이/해결 (0) | 2022.09.02 |
[프로그래머스] 방금그곡 C++풀이/해결 (0) | 2022.08.29 |
[백준 1012] 유기농배추 C++풀이/해결 (0) | 2022.08.20 |
[백준 2667] 단지번호붙이기 C++풀이/해결 (0) | 2022.08.20 |