[코딩 자율학습단 17기] 11일차

네버릭스·2025년 10월 20일
post-thumbnail

// 2025년 10월 20일


Day 11 : 여러 데이터 한번에 저장하기 : 배열과 문자열

프로젝트 : 자라나라 머리카락

오늘은 6장을 마무리하는 프로젝트 '자라나라 머리카락' 을 진행했다.

// 주석을 통해 코드 설명을 추가하면서 진행했다.

조합할 약병 개수 정하기

#include <stdio.h>
#include <time.h> // 헤더 파일 추가
#include <stdlib.h> // 헤더 파일 추가

int main(void)
{
	srand(time(NULL)); // 난수 초기화
	int treatment = rand() % 4; // 난수 생성, 진짜 발모제 선택(0~3)
	printf("\n\n === 자라나라 머리카락 게임 === \n\n"); // 게임 시작 안내 문구
    return 0;
}

int main(void)
{
	srand(time(NULL));
	int treatment = rand() % 4;
	printf("\n\n === 자라나라 머리카락 게임 === \n\n");
	int cntShowBottle = 0; // 이번 회차에 조합할 약병 개수
	int prevCntShowBottle = 0; // 앞 회차에 조합한 약병 개수
	for (int i = 1; i <= 3; i++) // 3회 테스트
	{
		int bottle[4] = { 0, 0, 0, 0 }; // 약병 4개를 담는 배열 선언
		do // 약병 개수가 다를 때까지 조합
		{
			cntShowBottle = rand() % 2 + 2; // 조합할 약병 개수(0~1 + 2 -> 2~3)
		} while (cntShowBottle == prevCntShowBottle);
		prevCntShowBottle = cntShowBottle; // 이번 회차의 약병 개수 저장
		printf(" > %d번째 테스트 : ", i); // 회차 정보 출력
    }
    return 0;
}

조합할 약병 번호 선택하기

printf(" > %d번째 테스트 : ", i);
int isIncluded = 0;
for (int j = 0; j < cntShowBottle; j++) // 조합할 약병 번호 선택
{
	int randBottle = rand() % 4; // 약병 번호 뽑기(0~3)
	if (bottle[randBottle] == 0) // 아직 선택되지 않은 약병이면
	{
		bottle[randBottle] = 1; // 값을 0 -> 1
		if (randBottle == treatment) // 진짜 발모제가 포함됨
		{
			isIncluded = 1;
		}
		else // 이미 선택된 약병이면 중복이므로 다시 선택
		{
			j--; // 반복 횟수 조정
		}
	}
}

약병 조합과 결과를 화면에 표시하기

     // 사용자에게 테스트 결과 표시
     for (int k = 0; k < 4; k++) // bottle 배열의 값 확인
     {
	     if (bottle[k] == 1) // 선택된 약병인지 확인
	     {
		    printf("%d ", k + 1); // 인덱스 + 1, %d 뒤에 빈칸 하나 넣기
	     }
     }
     printf("번 물약을 머리에 바릅니다.\n\n"); // 안내 문구 출력
   }
   return 0;
}  

	printf("번 물약을 머리에 바릅니다.\n\n");
	if (isIncluded == 1) // 약병 조합에 발모제가 포함된 경우
	{
		printf(">> 성공! 머리카락이 났어요!!\n");
	}
	else // 약병 조합에 발모제가 포함되지 않은 경우
	{
		printf(">> 실패! 머리카락이 나지 않았어요. ㅠㅠ\n");
	}
	printf("\n 계속하려면 Enter를 누르세요. \n"); // 안내 문구
	getchar(); // Enter를 입력받아 다음 테스트 회차로 넘어가기
}

정답 입력받기

	printf("\n\n발모제는 몇 번일까요? " ); // 안내 문구 출력
	int answer; // 사용자가 입력한 값을 받은 변수 선언
	scanf_s("%d", &answer); // 사용자 입력받기
	if (answer == treatment + 1) // 진짜 발모제 번호와 같다면
	{
		printf("\n>> 정답입니다!\n");
	}
	else // 다르다면 정답 알려 주기
	{
		printf("\n>> 땡! 틀렸어요. 정답은 %d번입니다.\n", treatment + 1);
	}
	return 0;
}

전체 코드 확인하기

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

int main(void)
{
	srand(time(NULL));
	int treatment = rand() % 4;
	printf("\n\n === 자라나라 머리카락 게임 === \n\n");
	int cntShowBottle = 0;
	int prevCntShowBottle = 0;
	for (int i = 1; i <= 3; i++)
	{
		int bottle[4] = { 0, 0, 0, 0 };
		do
		{
			cntShowBottle = rand() % 2 + 2;
		} while (cntShowBottle == prevCntShowBottle);
		prevCntShowBottle = cntShowBottle;
		printf(" > %d번째 테스트 : ", i);
		int isIncluded = 0;
		for (int j = 0; j < cntShowBottle; j++)
		{
			int randBottle = rand() % 4;
			if (bottle[randBottle] == 0)
			{
				bottle[randBottle] = 1;
				if (randBottle == treatment)
				{
					isIncluded = 1;
				}
				else
				{
					j--;
				}
			}
		}
		for (int k = 0; k < 4; k++)
		{
			if (bottle[k] == 1)
			{
				printf("%d ", k + 1);
			}
		}
		printf("번 물약을 머리에 바릅니다.\n\n");
		if (isIncluded == 1)
		{
			printf(">> 성공! 머리카락이 났어요!!\n");
		}
		else
		{
			printf(">> 실패! 머리카락이 나지 않았어요. ㅠㅠ\n");
		}
		printf("\n 계속하려면 Enter를 누르세요. \n");
		getchar();
	}
	printf("\n\n발모제는 몇 번일까요? " );
	int answer;
	scanf_s("%d", &answer);
	if (answer == treatment + 1)
	{
		printf("\n>> 정답입니다!\n");
	}
	else
	{
		printf("\n>> 땡! 틀렸어요. 정답은 %d번입니다.\n", treatment + 1);
	}
	return 0;
}


11일차 후기

이번 프로젝트도 역시 코드를 보고 그냥 따라 치는 것이 아닌, 단계별로 하나씩 어떻게 진행되는지 확실히 알고 넘어가도록 학습했다. 사실 그냥 휙휙 넘기면서 학습하는 것이 익숙하기는 하다.. 코딩을 공부하는 것 뿐만 아니라 공부를 하는 방법도 지금 연습하고 있다는 마음가짐으로 학습을 하고 있다. 아무튼 6장도 끝냈다. 완독까지 파이팅해보자!


이미지 출처 : https://cafe.naver.com/gilbutitbook (길벗 코딩 자율학습단 공식 카페)
그 외의 모든 코딩 화면은 직접 작성하고, 실행하였습니다.

profile
도망친 곳에 낙원은 없다.

0개의 댓글