-
[백준 2869] 달팽이는 올라가고 싶다C 프로그래밍/BOJ 2022. 8. 1. 12:49728x90
https://www.acmicpc.net/problem/2869
#include <stdio.h> int go_up(int A, int B, int V) { int days; if (!((V - A) % (A - B))) days = (V - A) / (A - B); else days = (V - A) / (A - B) + 1; return days + 1; } int main(void) { int A, B, V; scanf("%d %d %d", &A, &B, &V); printf("%d", go_up(A, B, V)); //printf("%d\n", (V - A) / (A - B)); //debug return 0; }
로직은 금방 나왔는데 구현에서 막히는 이 상황 무엇 .. ? fail 4번 받고 당황스러웠다 ;;
일단 생각해야 할 것은 (1) 달팽이는 낮에 올라간다 (2) 정상에 도착하면 미끌어지지 않는다 는 사실이다.
그래서 정상에 딱 맞게 도착하든지, 아니면 올라가는 도중에 정상에 도착하든지 간에 마지막날 낮에 무조건 한 번은 움직여야 하니까 V - A 을 도출하고, 리턴할 때 days + 1 를 해준다.
마지막날 제외 다른 날들은 낮에 올라가고 밤에 내려오므로 하루 동안 A - B 만큼 올라간다.
그리고 (하루동안 올라가는 거리) * n >= (전체 높이 - 마지막날 낮에 올라가는 거리) 이므로, 일 수(n)을 구하기 위해 (V - A) / (A - B)를 도출한다.
이때 (V - A)가 (A - B)로 딱 나누어 떨어지면 days에 몫을 바로 대입해주면 되고, 만약 딱 나누어 떨어지지 않으면 하루동안 더 올라가야 한다는 것이므로 몫 + 1 을 해준다.
fail난 코드는 아래와 같은데 왜틀렸는지 모르겠다.....
혹시 지나가다가 발견하시는 분.. 댓글 부탁드립니다..
#include <stdio.h> #include <math.h> int go_up(int A, int B, int V) { int days; if (((V - A) / (A - B)) < 1) days = 1; else days = ceil((double)(V - A) / (A - B)); return days + 1; } int main(void) { int A, B, V; scanf("%d %d %d", &A, &B, &V); printf("%d", go_up(A, B, V)); //printf("%d\n", (V - A) / (A - B)); //debug return 0; }
만약에 (V - A) / (A - B) 가 0이 되면 days = 1로 둔다.
캐스팅을 통해 (V - A) / (A - B)의 타입을 실수로 변환해주고, 딱 떨어지지 않더라도 math.h 라이브러리의 ceil을 써서 무조건 올림해준다.
흠... 이게 틀린 이유가 뭘까 ... 알려주세요 ...
728x90'C 프로그래밍 > BOJ' 카테고리의 다른 글
[백준 10828] 스택 (0) 2022.08.15 [백준 13458] 시험감독 (0) 2022.08.13 [백준 1978] 소수 찾기 (0) 2022.07.31 [백준 9020] 골드바흐의 추측 (0) 2022.07.31 [백준 4948] 베르트랑 공준 (0) 2022.07.29