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 |
왜 이 생각을 못 햇는지.. 참 아쉽다
나는 먼저 일단 나누고 나머지를 이용해서 문제를 푸는 해법에만 메달렸다면..
대부분의 사람들은
남은 설탕 kg 이 5의 배수인지 체크
남은 설탕 kg수를 3씩 빼가면서 3kg 설탕 봉지 수를 하나 늘린다
남은 설탕 kg 이 5의 배수인지 체크
남은 설탕 kg수를 3씩 빼가면서 3kg 설탕 봉지 수를 하나 늘린다...
이렇게 간단한 논리로 문제를 풀었다.. 코드도 엄청 간결하다..
'옛날' 카테고리의 다른 글
[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 |