본문 바로가기

옛날

[8d] 2839 : 설탕 배달

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
 
int main() {
    int sugar; //배달해야하는 설탕 무게
    int division; //5로 나눈 몫 저장
    int remain; //5로 나눈 나머지 저장
    int balanceRemain; //나머지를 3의 배수로 맞추기 위해 몫을 i만큼 감소시키면서 나머지에 (5 * i)를 더한 값
 
    //설탕 무게 입력
    scanf("%d"&sugar);
 
    division = sugar / 5;
    remain = sugar % 5;
 
    if (remain != 0 && sugar != 3 && remain % 3 != 0) {
        //5로 나눈 나머지가 0이 아니고 설탕 무게가 3이 아니고 나머지가 딱 3으로 나눠떨어지지 않는 수일 경우
        for (int i = 1; division - i >= 0; i++) {
            //5로나눈 몫에서 i만큼씩 감소시키면서 필요할 경우 몫-i가 0이 될때까지 반복한다
 
            balanceRemain = remain + (i * 5); //몫을 i만큼 감소시키면서 증가한 나머지 값 
 
            if (balanceRemain % 3 == 0) {
                //나머지를 3의 배수에 맞추는데 성공했다면
 
                printf("%d", (division - i) + (balanceRemain / 3)); //감소시킨 몫 + (증가한나머지값/3) 을 출력
                return 0//출력 후 프로그램 종료
            }
        }
 
        //나머지를 3으로 나눠 떨어지게 만들기 불가능할 경우 -1 출력
        printf("-1");
    }else {
        //설탕 무게가 5로 딱 나눠 떨어지거나, 설탕 무게가 3이거나, 나머지가 딱 5로 나눠떨어지는 경우
 
        if (sugar == 3) {
            printf("1");
        }
        else if(remain % 3 == 0) {
            printf("%d", division + (remain / 3));
        }
        else {
            printf("%d", division);
        }
    }
 
    return 0;
}
cs


위는  내가 직접 생각해서 코딩한걸 나름 주석 달면서 알아보기 쉽게 바꿔본 것이다.
하지만 다른 사람들의 채점 현황을 보니 내 코드는 메모리를 아주 조금이지만 더 먹고 코드 줄도 엄청 많은편이었다.
그래서 다른 사람은 어떻게 코딩 햇을지 보았는데..


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<stdio.h>
 
int main() {
    int s, B = 0;
 
    scanf("%d"&s);
 
    while (1) {
        if (s % 5 == 0) {
            printf("%d", s/5 + B);
            break;
        }
        else if (s <= 0) {
            printf("-1");
            break;
        }
        s -= 3;
        B++;
    }
 
    return 0;
}
 
 
출처: http://hrothgar.tistory.com/4
cs
(s - 설탕무게, B - 3kg포대 수)


왜 이 생각을 못 햇는지.. 참 아쉽다
나는 먼저 일단 나누고 나머지를 이용해서 문제를 푸는 해법에만 메달렸다면..

대부분의 사람들은

남은 설탕 kg 이 5의 배수인지 체크
남은 설탕 kg수를 3씩 빼가면서 3kg 설탕 봉지 수를 하나 늘린다
남은 설탕 kg 이 5의 배수인지 체크

남은 설탕 kg수를 3씩 빼가면서 3kg 설탕 봉지 수를 하나 늘린다...


이렇게 간단한 논리로 문제를 풀었다.. 코드도 엄청 간결하다..


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

'옛날' 카테고리의 다른 글

[10d] 삼륙구 게임  (0) 2018.04.28
[9d] ID규칙 , 모음빈도  (0) 2018.04.27
ㅁㄴㅇ  (0) 2018.04.14
[7d] 카이사르 암호 (caesar cipher)  (0) 2018.04.12
[6d] 10817 : 세 수  (0) 2018.04.11