140
2020-04-22 15:58:40
4
202

C언어 도와주세요


문제가 이건데요 일단 돈 N개를 500원이랑 100원으로 나누어 떨어지게 코드를 작성을 했는데

주머니의 최대값을 구하기 위해서는 어떻게 해야할지 도저히 모르겠네요.... 도와주세요!

#include <stdio.h>
#define scanf scanf_s

int main()
{
	int N, K;
	int count5 = 0; 
	int count1 = 0;
	int countt = 0;
	
	scanf("%d %d", &N, &K);

	while (N > 0 && K > countt) {
		if (N >= 500) {
			N = N - 500;
			count5++;
			countt++;
			continue;
		}
		else if (N >= 100) {
			N = N - 100;
			count1++;
			countt++;
			continue;
		}
	}

	printf("%d\n", (count5 * 8) + (count1 * 5));

}

문제는 이거고요

0
0
  • 답변 4

  • 5rijin
    81
    2020-04-22 16:48:51

    단순하게 푸는 방법으로는

    빌린돈의 가능한 100원 500원 조합을 모두 구해서

    그 무게 중에 가장 큰거 선정하는 방법이 있겠네요

    0
  • 거신
    619
    2020-04-22 16:58:44 작성 2020-04-22 16:59:22 수정됨

    지금 문제 푼 방법은 동전을 가장 적게 주는 방법일 때 푸는 방법 아닌가요? 무게 최댓값을 찾아야되는거면 100원부터 확인해야되지 않나요?

    0
  • 140
    2020-04-22 17:19:57

    100원부터 해도 최대값이 나오질않네요...

    0
  • 거신
    619
    2020-04-22 17:59:47 작성 2020-04-22 19:43:47 수정됨

    c는 익숙하지가 않아서 자바로 풀어봤습니다. 답이 맞게 나오는진 모르겠는데 일단 제 맘대로 풀어봤습니다.

    간단하지만 그닥 효율적이진 않은 방법입니다. 요는 x가 k부터 시작해 0까지 줄어들고 반대로 y가 k까지 증가하면서 돈이 n이 되는지 확인, 거기에 해당한다면 무게를 구해 최대 무게에 새로 저장하는 방법입니다. 지금 써놓고 봤는데 max를 저장하는 부분에서 if문써서 이전의 값보다 클 때만 저장하면 최댓값됩니다. 이런 방법으로 작성했습니다.

    나중에 시간나면 c로 바꿔보겠습니다

    public class Main {
    	public static void main(String[] args) {
    		int max = 0;
    		int x = 0, y = 0;	//x : 100원짜리 동전 개수, y : 500원짜리 동전 개수
    		
    		int n = 100000;	//빌린돈
    		int k = 300;	//동전 총 갯수
    		
    		System.out.println("빌린 돈 : " + n + "\n담을 수 있는 동전 갯수 : " + k);
    		x = k - y;
    		while(true) {
    			if((100 * x) + (500 * y) == n) {
    				int temp = (8 * x) + (5 * y);		//동전 무게
    				if(temp > max)			//새로 계산한 무게가 이전의 무게보다 무거우면 새로운 최댓값 저장
    					max = temp;
    			}
    			x--;
    			y++;
    			//x감소, y증가
    			if(y == k) {	//계속 반복하다가 y가 최대치가 되면 종료.
    				break;
    			}
    		}
    		System.out.println("동전의 최대 무게 : " + max + "g");
    	}
    }


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