나자바봐라
60
2020-09-17 14:51:05 작성 2020-09-17 14:51:36 수정됨
11
414

C언어 3중for문 문제 관련


100원으로 100마리의 가축을 사려고 합니다. 소는 한 마리에 10원, 양은 3원, 염소는 2마리에 1원인데 종류 별로 적어도 한 마리는 사야 합니다.소, 양, 염소를 각각 몇 마리씩 사야 할까요? 답은 소 5마리, 양 1마리, 염소 94마리입니다.M원으로 N마리의 가축을 사려고 합니다. 소는 한 마리에 A원, 양은 B원, 염소는 C마리에 D원인데 종류 별로 적어도 한 마리는 사야 합니다. M, N, A, B, C, D를 입력 받아서 소, 양, 염소를 각각 몇 마리씩 사야 하는지 순서대로 적어 보세요.


Input 은 줄에 M, N, A, B, C, D가 입력됩니다.모두 정수입니다.

Output 같은 줄에 소의 마리 수, 양 마리 수, 염소의 마리 수를 출력합니다.

위와 같은 문제가 있는데요 ㅠ..

#include <stdio.h>

int main() {

    int M; // 가지고 있는 돈
    int N; // 살 가축의 수
    int A; // 소 한 마리 가격
    int B; // 양 한 마리 가격
    int C;
    int D; // 염소 C마리에 D원
    int cow, sheep, goat;

    scanf("%d%d%d%d%d%d", &M, &N, &A, &B, &C, &D);
    for (cow = 1; cow <= 100; cow++)
        for (sheep = 1; sheep <= 100; sheep++)
            for (goat = 1; goat <= 100; goat++)
              if(cow + sheep + goat == 100)
                    if (A * cow * C + B * sheep * C + D * goat == 100 * C )
                           printf("%d %d %d", cow, sheep, goat);
    return 0;
}

이렇게 코드작성해봤는데 IDE에서 제대로 된 값은 나오는데.. 테스트 사이트에서는 오답이라네요.. 어디가 문제일까요?





0
  • 답변 11

  • 초보자1212
    2k
    2020-09-17 14:55:49

    그 사이트에서 어떤 tc 를 갖고 있을지 모르는데 뭐가 오류라는지 안알려주시면 알 길이 없죠..

  • yeori
    1k
    2020-09-17 15:11:56

    염소가 2마리 3원이라면 염소는 반드시 2마리 단위로 사야 하는가, 아니면 1마리씩(1.5원) 살 수 있는가?

    살 수 있는 세 동물의 조합이 여러가지일 수 있는가, 반드시 한가지인가? 만일 여러가지라면 무엇을 출력해야 하는가? 아무거나 출럭해도 되는가?

    답은 반드시 존재하는가? 없을 수도 있는가?

    정확히 100원에 맞춰야 하는가?(남는 돈 없이)

  • 나자바봐라
    60
    2020-09-17 15:12:21

    제말이 그렇습니다 ㅠ 뭐가오륜지 안알려줘요

  • 초보자1212
    2k
    2020-09-17 15:14:51

    백준 사이트인가보네요..ㅋㅋ

    일단 가장 먼저 의심해볼 수 있는건 시간초과 같은데요.. 흠

  • 타임머신
    73
    2020-09-17 15:21:20 작성 2020-09-17 15:21:32 수정됨
    결과가 제대로 나왔지만 오류가 나왔다면, 문제가 원하는 정답 조건을 만족하지 못했기 때문에 오류가 발생할 수 있습니다. 윗분 말씀대로 시간초과 문제가 가장 클 것 같네요. for문을 중첩해서 사용할 수록 효율이 나빠지니까요. 최대공약수 최소공배수 알고리즘 문제같은데 알고리즘 검색해보시면 해결하실 수 있을거에요
  • 보면늦다
    18
    2020-09-17 15:24:58 작성 2020-09-17 15:25:44 수정됨

    100 마리 100원 이라고 하고 N, M 은 입력받을 수 있고?

    좀 이상한데요?


    100마리 100원이면 M, N 이 100 이므로 입력받을 이유가 없고

    M, N 을 입력받아야 하면 for문 if문 에서 100 이라는 상수가 들어가면 안될 것 같은데요?


    200 마리 200원일때 10000마리 10000원일 때 제대로 동작할까요?

  • 한번사는인생
    238
    2020-09-17 15:50:14

    일단 저도 생각을 해봤는데,

    3중 for문이 의미가 있나 싶습니다.


    문제로 돌아가면 2중 for문으로 처리가 가능합니다.

    M원으로 N마리

    소는 1마리 A 

    양은 1마리 B

    염소는 C마리 D


    // 소, 전체금액을 소한마리금액으로 나눈 몫(최대로 소를 살 수 있는 것이 M/A)
    for(var i = 1; i <= M/A; i++) {
        // 양, 위와 동일하게 최대로 양을 살 수 있는 것이 M/B
        for(var j = 1; j <= M/B; j++) {
            염소의 갯수는 소(i)와 양(j)의 갯수가 정해져있으므로 염소는 전체 - ( i + j ) 만 가능
            이때, 소,양,염소의 갯수가 정해졌으므로 해당 갯수로 마리를 체크해보면 됩니다.
        }
    }


    3중 for문부터 없애보는게 더 좋아보이네요.

  • rezigrene
    1k
    2020-09-17 16:16:45

    천원으로 1000마리를 사는 경우를 구할수 없습니다.


    100은 머릿속과 코드에서 지우세요

  • 나자바봐라
    60
    2020-09-17 16:22:30

    아 for속에 100을넣었네요!!!ㅠㅠㅠㅠ 감사합니다 여러분

  • 나자바봐라
    60
    2020-09-17 16:38:55


    #include <stdio.h>
    
    int main() {
    
        int M; // 가지고 있는 돈
        int N; // 살 가축의 수
        int A; // 소 한 마리 가격
        int B; // 양 한 마리 가격
        int C;
        int D; // 염소 C마리에 D원
        int cow, sheep, goat;
    
        scanf("%d%d%d%d%d%d", &M, &N, &A, &B, &C, &D);
        for (cow = 1; cow <= N; cow++)
            for (sheep = 1; sheep <= N; sheep++)
                for (goat = 1; goat <= N; goat++)
                  if(cow + sheep + goat == N)
                        if (A * cow * C + B * sheep * C + D * goat == M * C )
                               printf("%d %d %d", cow, sheep, goat);
        return 0;
    }

    100 , 100 >> M ,  N으로 바꿨더니 accepted 뜨네요 ㅠㅠ 감사합니다모두

  • 한번사는인생
    238
    2020-09-17 17:08:26

    accepted 받으신게 중요한게 아니라,

    어떻게 생각하고 푸시는게 더 중요하거 같아요.

    for문이 아직도 지저분하다고 생각안하시나요..ㅜ.ㅜ

    다시 한번 고민해보시고 수정하셨으면 좋겠습니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.