[C언어] 백준 2839 : 설탕 배달

mainsain·2022년 3월 15일
0

백준

목록 보기
8/64

문제의 이해

먼저 나는 처음에 보고 감이 안잡혔다. n이 18이라고 가정하고, 3을 6개 쓰는 경우와 5를 3개, 3을 1개를 쓰는 경우를 구분하면서 푸는 규칙이 보이지 않았다.
그래서 무작정 3부터 20까지 적어보았다.

11121314151617181920
3434345454

뭔가 보였다. 짝수번은 4로 고정되어있다.
홀수번과 짝수번으로 나누어서 고려를 하는 방향으로 가닥을 잡았다.

계속 21부터 30까지 적어보았다.

21222324252627282930
5656567676

짝수번은 십의 자리가 바뀌니 6으로 고정이 된다. 당연한게 12에서 22로 10 증가하면, 5가 2개 증가하는 것이기 때문에 2씩 차이가 난다.
당연하게 30, 40, 50 ... 계속 2씩 차이가 날 것이다.

다음은 홀수다.
11,13,15는 3이다.
17, 19, 21, 23, 25는 5이다.
27, 29, 31, 33, 35는 7이다.
같은 논리로 2씩 증가하며, 고려해야 할게 뭔가 불편하게 숫자가 정리되어 있는 것이다.
풀이에서 보자.

내가 푼 풀이

#include <stdio.h>

int main()
{
    int n, count;

    scanf("%d", &n);
    if (n <= 10)
    {
        if (n == 3 || n == 5)
            printf("1");
        else if (n == 4 || n == 7)
            printf("-1");
        else if (n == 6 || n == 8 || n == 10)
            printf("2");
        else
            printf("3");
    } // 일의 자리에서는 케이스별로 다 하나씩 분류해주었다.
    // 어차피 -1이 되는 값은 4와 7밖에 없고, 그 후론 무조건 나누어진다.
    else
    {
        if (n % 10 == 0)
        {
            count = 2;
            count = n / 10 * 2;
            printf("%d", count);
        } // 20, 30, 40.. 은 5로 잘 나누어지기에 따로 분류를 해주었다.
        // 처리를 안해주면 값이 달라진다.
        else if (n % 2 == 0)
        {
            count = 2;
            count = count + n / 10 * 2;
            printf("%d", count);
        } // 10으로 나눈 값의 몫만큼 2를 곱해준다. 그 값을 count에 저장 후 출력.
        else
        {
            count = 3;
            n = n - 6; // 불편한 숫자들을 -6으로 깔끔하게 처리를 해준다.
            count = count + n / 10 * 2; // 그 값을 위 논리대로 출력.
            printf("%d", count);
        }
    }
}

다른 사람 코드

#include <stdio.h>
void main() {
    int Box = 0, input;
    scanf("%d", &input);
 
    while (1) {
        if (input % 5 == 0) {
            Box += input / 5;
            printf("%d", Box);
            break;
        }
 
        input = input - 3;
        Box++;
 
        if (input < 0) {
            printf("-1");
            break;
        }
    }
}

box변수 선언, input에 3을 계속 빼주면서 % 5 가 될 때까지 나누어준다. 4와 7이 아닌 이상 무조건 if에 걸리는데, box값을 input / 5 더하면서 출력 후 반복문 탈출.

안걸릴 경우 -1 출력 후 탈출.

너무 깔끔하다..ㄷㄷ

profile
새로운 자극을 주세요.

0개의 댓글

관련 채용 정보