C#/수업 내용

[C#] 2021-8-20 challenge 문제, Random 중복값 방지

JSH1 2021. 8. 20. 20:59

https://jsh1.tistory.com/19

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Hello_World
{
    class Program
    {
        static void Main(string[] args)
        {
            Random dice = new Random();
            int dice_check = 0; //랜덤 주사위 값
            int overlap_check = 0; //주사위 값이 뽑은 번호랑 중복이 아닐시 증가연산
            int[] lottery_numbers = new int[7]; //뽑은 번호
            bool finish = false;

            while (!finish)
            {
                Console.Write("\n추첨하시려면 엔터를 누르세요: ");
                Console.ReadLine();
                dice_check = dice.Next(1, 10 + 1); //랜덤값 생성

                for (int j = 0; j < lottery_numbers.Length; j++)
                {
                    if (lottery_numbers[j] != dice_check) //중복안되면 증가연산
                    {
                        overlap_check++;
                    }
                }

                if (overlap_check == 7) //중복된 숫자가 하나도 없을시 if문 실행
                {
                    for (int i = 0; i < lottery_numbers.Length; i++)
                    {
                        if (i == lottery_numbers.Length - 1) // i == 6
                        {
                            lottery_numbers[i] = dice_check;
                            Console.WriteLine("보너스번호: {0}번\n", lottery_numbers[i]);
                            finish = true; //while문이 실행 안되게 값을 바꿔줌
                            break; //for문 종료, while문이 막혀서 프로그램 종료
                        }

                        if (lottery_numbers[i] == 0)
                        {
                            lottery_numbers[i] = dice_check;
                            Console.WriteLine("당첨번호: {0}번", lottery_numbers[i]);
                            overlap_check = 0; //중복체크 값 초기화
                            break; //for문 종료후 while문에서 다시 시작
                        }
                    }
                }
                else
                {
                    Console.WriteLine("중복");
                    overlap_check = 0;
                }

            }

        }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Hello_World
{
    class Program
    {
        static void Main(string[] args)
        {
            Random dice = new Random();
            int lottery_max_count = 7;
            int[] lottery_numbers = new int[lottery_max_count];
            bool overlap;

            for (int i = 0; i < lottery_max_count; i++)
            {
                while (true)
                {
                    Console.Write("\n추첨하시려면 엔터를 누르세요: ");
                    Console.ReadLine();

                    lottery_numbers[i] = dice.Next(1, 12 + 1);
                    overlap = false;

                    for (int j = 0; j < i; j++)
                    {
                        if (lottery_numbers[i] == lottery_numbers[j])
                        {
                            Console.WriteLine("중복된 번호입니다. 다시 뽑아주세요");
                            overlap = true;
                            break;
                        }
                    }

                    if(!overlap)
                    {
                        break;
                    }
                } //while문 끝

                if (i == lottery_max_count - 1)
                {
                    Console.WriteLine("보너스번호: {0}번", lottery_numbers[i]);
                    break;
                }
                Console.WriteLine("당첨번호: {0}번", lottery_numbers[i]);
                
            } //i for문 끝
            
        }
    }
}

길고 가독성 떨어지는 코드를 수정하기 위해 검색 활용


using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Hello_World
{
    class Program
    {
        static void Main(string[] args)
        {
            Random random = new Random();
            ArrayList list = new ArrayList();
            int lottery_number;

            for (int i = 0; i < 12; i++)
            {
                list.Add(i + 1);
            }

            for (int i = 0; i < 7; i++)
            {
                Console.Write("\n추첨하시려면 엔터를 누르세요");
                Console.ReadLine();
                lottery_number = random.Next(0, list.Count);

                if(i==6)
                {
                    Console.WriteLine("보너스번호 : {0} ", list[lottery_number]);
                    list.RemoveAt(lottery_number);
                    break;
                }

                Console.WriteLine("당첨번호 : {0}", list[lottery_number]);
                list.RemoveAt(lottery_number);
            }

        }
    }
}


 

'C# > 수업 내용' 카테고리의 다른 글

[C#] 2021-08-23 오전  (0) 2021.08.23
[C#] switch case문  (0) 2021.08.23
[C#] 2021-08-20 오후 for문 연습 문제 11~17, challenge  (0) 2021.08.20
[C#] 2021-08-20 오후 for문 연습 문제 1~10  (0) 2021.08.20
[C#] for, foreach  (0) 2021.08.20