[2025.03.15.(토)]
구현은 했지만, 자동으로 돌렸을 때 속도가 굉장히 느림....
시간이 너무 늦어져서 주석은 내일 다시 달아서 올리겠음,,,, ㅎ
이거 함수 하나도 안쓰고 만든거라서 코드가 너무 길어요,,, 내일은 함수화를 시켜볼게요~~
아 맞다!! 아직 문자 입력했을 때는 처리 못했음 ㅠㅠ 내일 이것도 도전해보겠음 (사실 12시 넘어서 오늘ㅎ)
그리고 순서도 그린다음에 코드 짰는데, 순서도 너무 부족해서 이것도 수정해서 내일 다시 올려보던가 할게용
원래 아직 배열을 배우지 않아서 사용하지 않고 만들어보려고 했는데,,, 한계에 부딪혀 그냥 책 배열 파트 보고 만들었습니다 ㅋㅋㅋㅋ 배열 안쓰고 하려니,,,, 변수도 엄청 하나하나 다 선언해야하고,,,,, 너무 힘들겠더라구요,,,,,, 배열 공부 열심히 해볼게요,,,,
혹시, 제 결과 영상을 보셨나요...? 자동으로 돌릴때 1등되면 무한 루프 종료되게 하려고 한건데, 영상 보신 분들은 아시겠지만 결과가 굉장히 느리게 나와요,,,, 왜,,, 그런거죠,,,,,,,? 1등에 멈추라고 하면 일주일 걸릴 것 같아서,,,, 5등 되면 종료되도록 수정했어요..!!

★ 너무 느린게 나와서 시도해본것들
1. printf에 있는 한글을 모조리 다 없애봄.
2. 변수 초기화가 안되어서 그런가 해서 확인해서 문제 있을만한거 고쳐봄
3. clock 활용해서 동작 시간 얼마나 걸리는지 의심가는 파트들 확인해봄 (대체로 0.00002초 정도 걸렸음.)
하지만,,, 아직 왜 그런지 원인을 발견하지 못했어요,,, 초천재 여러분들 도와주세요 ㅠㅠㅠ
제가 코드를 너무 더럽게(?) 짜서 연산 시간이 오래걸리는 걸까요...?
(오늘 질문 많이 드렸는데, 전부 다 대답해주시고 같이 고민해주신 초천재 반장님 감쟈합니다요!!!!!)
// 2025.03.15. (일) - 로또 만들기 과제
#include <stdio.h>
#include <string.h>
#include <time.h> // 랜덤 숫자 뽑으려고 씀.
#include <stdlib.h> // 오름차순 정렬 함수 쓰기 위해서 씀.
// 오름차순 하기위한 함수
// int compare(const int* a, const int* b)
// {
// return(*a - *b);
// }
int main()
{
clock_t start1, finish1;
double duration1;
clock_t start2, finish2;
double duration2;
clock_t start3, finish3;
double duration3;
clock_t start4, finish4;
double duration4;
int user_select, user_select2;
int user_num;
int com_num_list[7];
int com_num_final[6];
int bonus_num;
int count = 0;
int same_count = 0;
int bonus_count = 0;
int input_num = 0;
printf("LOTTO!\n");
while(1)
{
count++;
int user_num_list[6] = {0, 0, 0, 0, 0, 0};
while(input_num < 6) // 사용자 6개 숫자 입력
{
int switch1 = 0;
// printf("6개의 숫자를 입력해주세요. : ");
scanf("%d", &user_num);
if (user_num < 1 || user_num > 45)
{
// printf("다시입력하세요!\n");
continue;
}
for (int j = 0 ; j < sizeof(user_num_list)/sizeof(user_num_list[0]) ; j++)
{
if (user_num == user_num_list[j])
{
switch1 = 1;
break;
}
}
if (switch1 == 1)
{
// printf("중복된 숫자 입니다. 다시 입력하세요.\n");
continue;
}
user_num_list[input_num] = user_num;
input_num++;
}
// printf("[사용자 수동 숫자]\n");
printf("user number\n");
// qsort(user_num_list, sizeof(user_num_list)/sizeof(user_num_list[0]), sizeof(int), compare);
for (int i = 0 ; i < sizeof(user_num_list)/sizeof(user_num_list[0]) ; i++)
{
printf("%d ", user_num_list[i]);
}
printf("\n\n");
// printf("수동으로 하실건가요? [ 1. 수동 | 2. 자동 ] : ");
printf("Are you sudong?\n");
scanf("%d", &user_select);
if (user_select == 1) // 수동을 선택한 경우
{
// printf("[수동]을 선택하셨습니다.\n");
while(1)
{
int switch2 = 0;
int switch3 = 0;
srand(time(NULL));
for (int i = 0 ; i < sizeof(com_num_list)/sizeof(com_num_list[0]) ; i++)
{
com_num_list[i] = (rand() % 45) + 1;
}
if (switch2 == 0)
{
for (int i = 0 ; i < sizeof(com_num_list)/sizeof(com_num_list[0]) ; i++)
{
if (switch3 == 0)
{
for (int j = i+1 ; j < sizeof(com_num_list)/sizeof(com_num_list[0]) ; j++)
{
if (com_num_list[i] == com_num_list[j])
{
switch2 = 1;
switch3 = 1;
break;
}
}
}
if (switch2 == 1)
{
break;
}
}
}
if (switch2 == 1)
{
continue;
}
break;
}
bonus_num = com_num_list[6];
for (int i = 0 ; i < sizeof(com_num_final)/sizeof(com_num_final[0]) ; i++)
{
com_num_final[i] = com_num_list[i];
}
// qsort(com_num_final, sizeof(com_num_final)/sizeof(com_num_final[0]), sizeof(int), compare);
// printf("[컴퓨터 자동 숫자]");
// for (int i = 0 ; i < sizeof(com_num_final)/sizeof(com_num_final[0]) ; i++)
// {
// printf("%d ", com_num_final[i]);
// }
// printf("\n\n");
// printf("보너스 숫자 : %d\n", bonus_num);
// 사용자 숫자와 컴퓨터 숫자 비교하는 코드
for (int i = 0 ; i < sizeof(com_num_final)/sizeof(com_num_final[0]) ; i ++)
{
for (int j = 0 ; j < sizeof(com_num_final)/sizeof(com_num_final[0]) ; j++)
{
if (user_num_list[i] == com_num_final[j])
{
same_count++;
}
else if (user_num_list[i] == bonus_num)
{
bonus_count++;
}
}
}
// printf("같은 갯수 : %d\n", same_count);
// printf("보너스 맞췄나? : %d\n", bonus_count);
if (same_count == 6)
{
input_num = 0;
// printf("%d회차 : [1등]\n", count);
// printf("한 게임 더 하시겠어요? [1. 한판 더! | 2.그마안!]: ");
scanf("%d", &user_select2);
if (user_select2 == 1)
{
continue;
}
else if (user_select2 == 2)
{
// printf("[게임 종료]\n");
break;
}
}
else if (same_count == 5 && bonus_num == 1)
{
input_num = 0;
// printf("%d회차 : [2등]\n", count);
// printf("한 게임 더 하시겠어요? [1. 한판 더! | 2.그마안!]: ");
scanf("%d", &user_select2);
if (user_select2 == 1)
{
continue;
}
else if (user_select2 == 2)
{
// printf("[게임 종료]\n");
break;
}
}
else if (same_count == 5)
{
input_num = 0;
// printf("%d회차 : [3등]\n", count);
// printf("한 게임 더 하시겠어요? [1. 한판 더! | 2.그마안!]: ");
scanf("%d", &user_select2);
if (user_select2 == 1)
{
continue;
}
else if (user_select2 == 2)
{
// printf("[게임 종료]\n");
break;
}
}
else if (same_count == 4)
{
input_num = 0;
// printf("%d회차 : [4등]\n", count);
// printf("한 게임 더 하시겠어요? [1. 한판 더! | 2.그마안!]: ");
scanf("%d", &user_select2);
if (user_select2 == 1)
{
continue;
}
else if (user_select2 == 2)
{
// printf("[게임 종료]\n");
break;
}
}
else if (same_count == 3)
{
input_num = 0;
// printf("%d회차 : [5등]\n", count);
// printf("한 게임 더 하시겠어요? [1. 한판 더! | 2.그마안!]: ");
scanf("%d", &user_select2);
if (user_select2 == 1)
{
continue;
}
else if (user_select2 == 2)
{
// printf("[게임 종료]\n");
break;
}
}
else
{
input_num = 0;
// printf("%d회차 : [낙첨]\n", count);
// printf("한 게임 더 하시겠어요? [1. 한판 더! | 2.그마안!]: ");
scanf("%d", &user_select2);
if (user_select2 == 1)
{
continue;
}
else if (user_select2 == 2)
{
printf("[게임 종료]\n");
break;
}
}
}
else if (user_select == 2)
{
start3 = clock();
// printf("[자동]을 선택하셨습니다.\n");
while (1)
{
same_count = 0;
count++;
while(1) // 컴퓨터 당첨 숫자 7자리 뽑는 코드
{
start1 = clock();
int switch2 = 0;
int switch3 = 0;
srand(time(NULL)+count);
for (int i = 0 ; i < sizeof(com_num_list)/sizeof(com_num_list[0]) ; i++)
{
com_num_list[i] = (rand() % 45) + 1;
}
if (switch2 == 0)
{
for (int i = 0 ; i < sizeof(com_num_list)/sizeof(com_num_list[0]) ; i++)
{
if (switch3 == 0)
{
for (int j = i+1 ; j < sizeof(com_num_list)/sizeof(com_num_list[0]) ; j++)
{
if (com_num_list[i] == com_num_list[j])
{
switch2 = 1;
switch3 = 1;
break;
}
}
}
if (switch2 == 1)
{
break;
}
}
}
if (switch2 == 1)
{
continue;
}
finish1 = clock();
duration1 = (double)(finish1 - start1) / CLOCKS_PER_SEC;
// printf("1. 컴퓨터 숫자 랜덤 확인 : %lf 초입니다..\n", duration1);
break;
}
start2 = clock();
bonus_num = com_num_list[6];
for (int i = 0 ; i < sizeof(com_num_final)/sizeof(com_num_final[0]) ; i++)
{
com_num_final[i] = com_num_list[i];
}
// qsort(com_num_final, sizeof(com_num_final)/sizeof(com_num_final[0]), sizeof(int), compare);
// printf("[컴퓨터 자동 숫자] ");
printf("computer number\n");
for (int i = 0 ; i < sizeof(com_num_final)/sizeof(com_num_final[0]) ; i++)
{
printf("%d ", com_num_final[i]);
}
// printf("\n");
printf("bonus number\n");
printf("%d\n", bonus_num);
start4 = clock();
// 사용자 숫자와 컴퓨터 숫자 비교하는 코드
for (int i = 0 ; i < sizeof(com_num_final)/sizeof(com_num_final[0]) ; i ++)
{
for (int j = 0 ; j < sizeof(com_num_final)/sizeof(com_num_final[0]) ; j++)
{
if (user_num_list[i] == com_num_final[j])
{
same_count++;
}
else if (user_num_list[i] == bonus_num)
{
bonus_count = 1;
}
}
}
finish4 = clock();
duration4 = (double)(finish4 - start4) / CLOCKS_PER_SEC;
// printf("4. 같은 숫자 갯수 확인 : %lf 초입니다..\n", duration1);
// printf("같은 갯수 : %d\n", same_count);
// printf("보너스 : %d\n", bonus_count);
if (same_count == 6)
{
// printf("%d회차 : [1등]\n", count);
// printf("=============================\n");
}
else if (same_count == 5 && bonus_num == 1)
{
// printf("%d회차 : [2등]\n", count);
// printf("=============================\n");
}
else if (same_count == 5)
{
// printf("%d회차 : [3등]\n", count);
// printf("=============================\n");
}
else if (same_count == 4)
{
// printf("%d회차 : [4등]\n", count);
// printf("=============================\n");
}
else if (same_count == 3)
{
printf("555555\n");
// printf("%d회차 : [5등]\n", count);
// finish2 = clock();
// duration2 = (double)(finish2 - start2) / CLOCKS_PER_SEC;
// printf("2. 등수 확인 : %lf 초입니다..\n", duration2);
// printf("=============================\n");
break;
}
else
{
// printf("%d회차 : [낙첨]\n", count);
// finish2 = clock();
// duration2 = (double)(finish2 - start2) / CLOCKS_PER_SEC;
// printf("2. 등수 확인 : %lf 초입니다..\n", duration2);
// printf("=============================\n");
}
}
finish3 = clock();
duration3 = (double)(finish3 - start3) / CLOCKS_PER_SEC;
// printf("3. 로또 자동했을 때 프로그램 전체 시간 : %lf 초입니다..\n", duration3);
break;
}
else
{
// printf("다시 입력하세요!\n");
}
}
return 0;
}
'C > 개인프로젝트01 - 로또' 카테고리의 다른 글
[2025.03.15 - 2025.03.16] (주말과제) C언어 로또 프로그램 만들기_개발완료보고서 (0) | 2025.03.17 |
---|---|
[2025.03.15 - 2025.03.16] (주말과제) C언어 로또 프로그램 만들기_2 (0) | 2025.03.17 |