728x90
반응형

/*
공원을 아름답게 하기 위해서 봄에 꽃 종자를 구입하여 꽃길을 만들 계획이다.
붉은색 꽃, 노란색 꽃, 보라색 꽃을 색상별로 최소 5봉지 이상 구매하고 싶다.
그 중 품종에 대한 요구 사항은 적어도 (다음 조건 중 하나를 충족한다). or ||

if (yellow)

1. 노란색 꽃은 빨간색 꽃의 2배가 필요하다.
2. 보라색 꽃은 노란색 꽃의 1/3 이다.

이 비율에 따라 구매가 진행되며 총 구매 경비 x는 (n < x < 2000) 이내이며,
n은 사용자가 화면에서 입력한다.

그 중 
붉은색 꽃은 한 포대에 80원, 
노란색 꽃은 한 포대에 50원,
보라색 꽃은 한 포대에 36원이다.

(출력은 빨강, 노랑, 보라 세가지 꽃의 작은 것부터 큰 것 순으로 출력하라.)

입력문 형식 "%d" // 구매경비 최소값 n 입력
출력문 형식 "%d", %d, %d \n" // 빨간색, 노란색, 보라색 꽃 세가지 수 출력

실행 샘플
입력: 1950

// r,y,p 가능한 경우의 수를 모두 출력
5, 10, 30 // 조건1
6, 12, 25 //1
6, 24, 8 //2
7, 14, 20
8, 16, 15
9, 18, 10
10, 20, 5 //1
11, 18, 6 //2
13, 15, 5
*/

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	// Price
	int RED = 80;
	int YEL = 50;
	int PUR = 36;

	// Required minimum
	int redNum = 5;
	int yelNum = 5;
	int purNum = 5;

	// Initialize var
	int MIN = 0;
	int MAX = 2000;
	int SUM = 0;
	int count = 1;
	
	printf("구매 경비 최소값 입력 (최대: 2000) : ");
	scanf("%d", &MIN);

	for (redNum; RED * redNum <= MAX; redNum++)
	{
		for (yelNum; YEL * yelNum <= MAX; yelNum++)
		{
			for (purNum; PUR * purNum <= MAX; purNum++)
			{
				SUM = (RED * redNum) + (YEL * yelNum) + (PUR * purNum);

				if ( (MIN <= SUM) && (SUM <= MAX) 
					&& (redNum * 2 == yelNum || purNum * 3 == yelNum))
				{
					printf("%d, %d, %d, sum : %d, count : %d\n", 
						redNum, yelNum, purNum, SUM, count);

					count += 1;
				}
			}
			purNum = 5;
		}
		yelNum = 5;
	}
	return 0;
}

 

 

// 수탉은 5달러, 암탉은 3달러 병아리는 3마리에 1달러
// 총 100불을 사용하여 닭 100마리를 사려면 수암병을 몇마리씩 사야하나

// 100불을 사용하여 닭 100마리를 사려면 몇마리의 수탉, 암탉, 병아리를 얻을 수 있을까?

#include <stdio.h>

int main(void)
{
	int TOTAL = 100;
	int SUM = 0;

	int roosterPrice = 5;	// 수컷 가격
	int henPrice = 3;	// 암컷 가격
	int chickPrice = 1;	// 병아리 가격 (1 / 3)

	int rooster = 1;
	int hen = 1;
	int chick = 3;

	for (roosterPrice; roosterPrice * rooster <= TOTAL; rooster++)
	{
		for (henPrice; henPrice * hen <= TOTAL; hen++)
		{
			for (chickPrice; chickPrice * chick <= TOTAL; chick++)
			{
				SUM = (roosterPrice * rooster) + (henPrice * hen) + (chickPrice * chick);

				if (SUM == TOTAL)
				{
					printf("수탉: %d, 암탉: %d, 병아리: %d, 합계 : %d\n", rooster, hen, chick*3, SUM);
				}
			}
			chick = 3;
		}
		hen = 1;
	}

	return 0;
}

 


#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void shuffle(int* arr, int num);

int main(void)
{
	int num = 0;
	int choiceNum;


	printf("숫자 입력. (2 이상 100 이하) : ");
	scanf_s("%d", &num);	

	int* cards = (int*)malloc(sizeof(int)* num); 
	if (cards == NULL)
	{
		exit(1);
	}
	for (int i = 0; i < num; i++)
	{
		cards[i] = i + 1;
	}

	int* box = (int*)malloc(sizeof(int) * num);
	if (box == NULL)
	{
		exit(1);
	}
	for (int i = 0; i < num; i++)
	{
		box[i] = cards[i];
	}
	
	shuffle(box, num);

	int* group = (int*)malloc(sizeof(int) * num);
	if (group == NULL)
	{
		exit(1);
	}

	int cnt = 0;

	while (1)
	{
		printf("임의의 상자 하나를 선택하세요. (총 %d개 이내) ", num);
		scanf_s("%d", &choiceNum);
		puts("");

		printf("%d번째 상자에 있는 카드번호: %d\n", choiceNum, box[choiceNum]);
		puts("");

		group[cnt] = box[choiceNum];

		cnt += 1;

		if (choiceNum == box[choiceNum])
		{
			break;
		}
		
		/*else if (choiceNum == )*/
	}

	for (int i = 0; i < cnt; i++)
	{
		printf("%d ", group[i]);
	}

	free(cards);
	free(box);
	free(group);



	return 0;
}

void shuffle(int* arr, int num)
{
	srand(time(NULL));
	int temp;
	int rn;
	for (int i = 0; i < num - 1; i++)
	{
		rn = rand() % (num - i) + i;
		temp = arr[i];
		arr[i] = arr[rn];
		arr[rn] = temp;
	}
}

//void showBox(int num)
//{
//	printf("%d", num);
//}
//
//int choice(int* arr, int num)
//{
//	while (1)
//	{
//		printf("임의의 상자 한개를 선택하세요. (%d 부터 %d 까지) : ", num - num, num);
//		scanf_s("%d", &choiceNum);
//		printf("선택한 번호 : %d, 선택한 번호에 있는 상자의 카드번호: %d", choiceNum, box[choiceNum]);
//	}
//}

>>>
숫자 카드 더미에 카드가 총 100장 있으며,
각 카드에는 1부터 100까지 숫자가 하나씩 적혀있다.
2 이상 100 이하의 자연수를 정해서 그 수보다 작거나 같은 숫자 카드들을
준비하고, 준비한 카드의 수만큼 작은 상자를 준비하면 게임을 시작한다

<< 게임 방법 >>
준비된 상자에 카드를 하나씩 넣고, 상자를 무작위로 섞어 일렬로 나열한다.
상자가 일렬로 나열되면 상자가 나열된 순서에 따라 1부터 순차적으로
증가하는 번호를 붙인다.(array)

그 다음 임의의 상자를 하나 선택하여 상자 안의 숫자 카드를 확인한다.
다음으로 확인한 카드에 적힌 번호에 해당하는 상자를 열어
안에 담긴 카드에 적힌 숫자를 확인한다.
마찬가지로 계속 반복을 하다가, 열어야 하는 상자가 이미 열려 있을 때 멈춘다.

이렇게 연 상자들은 1번 그룹이다.
1번 그룹은 다른 상자들과 섞이지 않도록 따로 둔다.
만약 1번 그룹을 제외하고 남는 상자가 없으면 게임이 종료되고,
이때 획득하는 점수는 0 점이다.

그렇지 않으면 남은 상자 중 다시 임의의 상자 하나를 골라 같은 방식으로 진행한다.
이렇게 연 상자들은 2번 그룹이다.

1번 그룹에 속한 상자의 수와 2번 그룹에 속한 상자의 수를 곱한 값이
이 게임의 점수이다.

상자안에 들어있는 카드 번호가 순서대로 담긴 카드 배열 cards가
매개변수로 주어질 때, 이 게임에서 얻을 수 있는 최고점수를 구해서
return 하는 solution 함수를 만들어라.

===
- 2 <= cards의 길이 <= 100
- cards의 원소는 cards 길이 이하인 임의의 자연수
- cards에는 중복되는 원소가 존재하지 않음
- cards[i]는 i+1 상자에 담긴 카드에 적힌 숫자를 의미함

입력 cards : 8 6 3 7 2 5 1 4 
출력 result : 12 // 12점이 나옴

출력 예시)
[8, 4, 7, 1] 갯수가 최고 점수 : 4
[3, 5,, 6] 갯수가 최고 점수 : 3
[2] 갯수가 최고 점수 : 1

4 * 3 = 12 total 점수임



// prototype

def solution(cards):
answer = 0
return answer


// stdio
// stdbool
// stdlib

int solution(int cards[], size_tcards_len)
{
int answer = 0;
return answer;
}

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <memory.h>

void shuffle(int* arr, int num);

int main(void)
{
	int num = 0;
	int choiceNum;

	printf("Number (0 < n <= 100) : ");
	scanf_s("%d", &num);	

	/* Cards */
	int* cards = (int*)malloc(sizeof(int)* num); 
	memset(cards, 0, sizeof(int) * num);
	if (cards == NULL)
	{
		exit(1);
	}
	for (int i = 1; i <= num; i++)
	{
		cards[i] = i;
	}
	printf("\n");

	/* Box */
	int* box = (int*)malloc(sizeof(int) * num);
	memset(box, 0, sizeof(int) * num);
	if (box == NULL)
	{
		exit(1);
	}
	for (int i = 1; i <= num; i++)
	{
		box[i] = cards[i];
	}
	printf("\n");
	
	/* Shuffle */
	shuffle(box, num);

	/* Group */
	int* group = (int*)malloc(sizeof(int) * num);
	if (group == NULL)
	{
		exit(1);
	}

	int cnt = 1;


	while (1)
	{
		printf("Group[%d] 임의의 상자 하나 선택 (%d개 이내) ",cnt, num);
		scanf_s("%d", &choiceNum);

		for (int i = 0; i < num; i++)
		{
			printf("%d번째 상자의 카드번호: %d\n", choiceNum, box[choiceNum]);
			choiceNum = box[choiceNum];

			// 그룹안에 choiceNum 이미 들어있다면, break
			for (int i = 0; i < sizeof(group)/sizeof(int); i++)
			{
				if (group[i] == choiceNum)
				{
					break;
				}
			}

			group[i] = choiceNum;

			//if (choiceNum == box[choiceNum])
			//{
			//	break;
			//}
		}
		for (int i = 0; i < num; i++)
		{
			printf("%d ", group[i]);
		}


		cnt += 1;
		puts("");
	}

	free(cards);
	free(box);
	free(group);

	return 0;
}

void shuffle(int* arr, int num)
{
	srand(time(NULL));
	int temp;
	int rn;
	for (int i = 1; i <= num - 1; i++)
	{
		rn = rand() % (num - i) + i;
		temp = arr[i];
		arr[i] = arr[rn];
		arr[rn] = temp;
	}
}
728x90
반응형

'Data Structure & Algorithm' 카테고리의 다른 글

About Call-Back Function  (0) 2022.11.18
Sort Score  (0) 2022.11.18
[Sort]Bubble, Selection, Insertion  (0) 2022.10.31
Basic Heap.(Priority Queue and Heap)  (0) 2022.10.31
Expression Tree(merger)  (0) 2022.10.31

+ Recent posts