C언어 : 결과가 중복으로 나오는 경우에 최소 박스인 경우만 나오도록 만들고 싶음

조회수 681회

3KG과 5KG의 박스에 12~17KG의 설탕을 상자의 무게가 남지 않으면서 최소가 되도록 담는 문제입니다.

제가 작성한 코드에서 중복으로 나오는 경우에 최소 박스인 경우만 나오도록 만들고 싶은데 어떤 문장을 추가해야할지 모르겠습니다.

#include<stdio.h>
int main(void) {

    int i, box_5, box_3; //반복변수, 5kg 상자 개수, 3kg 상자 개수

    for (i = 12; i <= 17; i++) // 설탕 키로수 범위에서 반복한다. 
    {
        for (box_5 = 0; box_5 <= 3; box_5++) // 5kg상자 개수(0개~3개=>0~15kg) 범위에서 반복한다. 
        {
            for (box_3 = 0; box_3 <= 5; box_3++) // 3kg상자 개수(0개~5개=0~15kg) 범위에서 반복한다.
            {
                if (i == 5 * box_5 + 3 * box_3) // 설탕 총 키로수=5*5kg상자개수+3*3kg상자개수이다.
                {
                    printf("%dkg : 5kg %d박스, 3kg %d박스\n", i, box_5, box_3);

                }
            }
        }


    }

    return 0;

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    3중반복문은 너무 무거워요.

    #include<stdio.h>
    int main(void) {
    
        int i, box_5, box_3; //반복변수, 5kg 상자 개수, 3kg 상자 개수
    
        for (i = 12; i <= 17; i++) // 설탕 키로수 범위에서 반복한다. 
        {
            for (box_5 = 0; box_5 <= 3; box_5++) // 5kg상자 개수(0개~3개=>0~15kg) 범위에서 반복한다. 
            {
                for (box_3 = 0; box_3 <= 5; box_3++) // 3kg상자 개수(0개~5개=0~15kg) 범위에서 반복한다.
                {
                    if (i == 5 * box_5 + 3 * box_3) // 설탕 총 키로수=5*5kg상자개수+3*3kg상자개수이다.
                    {
                        printf("%dkg : 5kg %d박스, 3kg %d박스\n", i, box_5, box_3);
                                            break;
    
                    }
                }
            }
    
    
        }
    
        return 0;
    }
    
    • 15KG의 경우가 두 번 실행되는 것이 현재 문제입니다..3중 반복문 말고 다른 방법으로 풀어야할까요..? songhee0611 2021.5.3 16:37
    • 지금 상태에서 처리하라고 하면... 첫번째 for 직전에 배열을 하나 만들고, 제일 안쪽 if 걸릴 때마다 그 배열에 상자 몇개짜리인지 '후보'를 추가하고, 첫번째 for 끝나기 직전에 그 후보들 중에서 최소인 놈만 찾아서 print하는 식으로 가야겠네요. 이게 맞을지 모르겠지만.. 엽토군 2021.5.3 22:56

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)