
// 2025년 10월 20일
오늘은 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;
}
이번 프로젝트도 역시 코드를 보고 그냥 따라 치는 것이 아닌, 단계별로 하나씩 어떻게 진행되는지 확실히 알고 넘어가도록 학습했다. 사실 그냥 휙휙 넘기면서 학습하는 것이 익숙하기는 하다.. 코딩을 공부하는 것 뿐만 아니라 공부를 하는 방법도 지금 연습하고 있다는 마음가짐으로 학습을 하고 있다. 아무튼 6장도 끝냈다. 완독까지 파이팅해보자!
이미지 출처 : https://cafe.naver.com/gilbutitbook (길벗 코딩 자율학습단 공식 카페)
그 외의 모든 코딩 화면은 직접 작성하고, 실행하였습니다.