컴퓨터는 0~9 중 서로 다른 세 개의 숫자를 선택
사용자는 이것을 맞춘다
숫자의 순서도 중요하다
순서와 숫자가 맞으면 strike, 순서는 다르지만 숫자가 맞으면 ball로 알려준다
1strike, 1ball
과 같이 알려준다
3strike를 성공하면 마무리 한다
이 문제를 풀때 중점적으로 생각한것은 랜덤으로 숫자를 생성할 때 중복이 없어야 한다는 점이다.
처음에 중복을 깜빡했다가 컴퓨터가 377을 설정하는 바람에 한참 헤메게 되었다.
개인적으로 함수를 사용해서 배열을 넘겨주고 받고 하는걸 공부하는게 목적이라 함수를 많이 사용했다.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 컴퓨터 숫자 생성
int *makeNum()
{
static int arr[3];
srand(time(NULL));
for (int i = 0; i < 3; i++)
{
if (i == 0)
{
arr[i] = rand() % 10;
}
else
{
arr[i] = rand() % 10;
for (int j = 0; j < i; j++)
{
if (arr[i] == arr[j])
{
i--;
break;
}
}
}
}
return arr;
}
// 사용자 숫자 입력
int *getNum()
{
static int arr[3];
int num;
printf("정수 3개 입력 : ");
for (int i = 0; i < 3; i++)
{
scanf("%d", &num);
arr[i] = num;
}
return arr;
}
// 숫자 비교하기
int compare(int *arr1, int *arr2)
{
int strike = 0, ball = 0;
for (int i = 0; i < 3; i++)
{
if (arr1[i] == arr2[i])
{
strike++;
}
for (int j = 0; j < 3; j++)
{
if (i != j)
{
if (arr1[i] == arr2[j])
{
ball++;
}
}
}
}
printf("%d strike, %d ball \n", strike, ball);
if (strike == 3)
{
return 1;
}
else
{
return 2;
}
}
// 메인함수
int main()
{
int *computer = makeNum();
// int *user = getNum();
int flag = 1;
int result, count = 0;
while (flag)
{
int *user = getNum();
result = compare(computer, user);
count++;
if (result == 1)
{
flag = 0;
}
}
printf("컴퓨터가 설정한 숫자 : ");
for (int i = 0; i < 3; i++)
{
printf("%d, ", computer[i]);
}
printf("\n%d번만에 승리했습니다\n", count);
return 0;
}
다 하고 보니까 코드 자체는 어렵지 않은데
너무 길게 작성한 것 같다.
조금 더 간추릴 수 있지 않을까 싶으면서 귀찮아서 여기까지
나중에 재미로 4개를 넣어도 재밌을 것 같다