ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준 2869] 달팽이는 올라가고 싶다
    C 프로그래밍/BOJ 2022. 8. 1. 12:49
    728x90

    https://www.acmicpc.net/problem/2869

     

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

    첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

    www.acmicpc.net

    #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

    댓글

Designed by Tistory.