C#

C# 배열과 컬렉션

anvil925 2025. 2. 10. 20:59
728x90
반응형

// C# 배열과 컬렉션

// 배열은 같은 데이터 타입의 변수를 여러 개 사용할 때 사용
// 배열은 크기를 변경할 수 없음
// 배열은 0부터 시작
// 배열은 인덱스를 사용하여 요소에 접근
// 배열은 for문을 사용하여 요소를 순회
// 배열은 foreach문을 사용하여 요소를 순회
// 배열은 배열 초기화식을 사용하여 요소를 초기화
// 배열은 배열 메서드를 사용하여 요소를 추가, 삭제, 복사
// 배열은 다차원 배열을 사용하여 2차원 이상의 배열을 생성
// 배열은 가변 배열을 사용하여 크기를 변경할 수 있는 배열을 생성

using System;
class ArraysAndCollections
{    
    public static void Arrays()
    {
        int[] numbers = new int[5]; // 5개의 요소를 가진 배열 생성
        numbers[0] = 1; // 첫 번째 요소에 1 대입
        numbers[1] = 2; // 두 번째 요소에 2 대입
        numbers[2] = 3; // 세 번째 요소에 3 대입
        numbers[3] = 4; // 네 번째 요소에 4 대입
        numbers[4] = 5; // 다섯 번째 요소에 5 대입
        for (int i = 0; i < numbers.Length; i++) // 배열의 길이만큼 반복
        {
            Console.WriteLine(numbers[i]); // 배열 요소 출력
        }
    }
    public static void CharacterStats()
    {
        // 플레이어의 공격력, 방어력, 체력, 스피드를 저장할 배열
        int[] playerStats = new int[4]; 

        // 능력치를 랜덤으로 생성하여 배열에 저장
        Random rand = new Random();
        for (int i = 0; i < playerStats.Length; i++)
        {
            playerStats[i] = rand.Next(1, 11);
        }

        // 능력치 출력
        Console.WriteLine("플레이어의 공격력: "  + playerStats[0]);
        Console.WriteLine("플레이어의 방어력: "  + playerStats[1]);
        Console.WriteLine("플레이어의 체력: "    + playerStats[2]);
        Console.WriteLine("플레이어의 스피드: "  + playerStats[3]);
    }
    public static void StudentsAverage()
    {
        int[] scores = new int[5]; // 5명의 학생 점수를 저장할 배열

        for(int i = 0; i < scores.Length; i++) // 배열의 길이만큼 반복
        {
            Console.Write("학생" + (i + 1) + "의 성적을 입력하세요:"); // 학생의 성적 입력 요청
            scores[i] = int.Parse(Console.ReadLine()); // 학생의 성적을 입력받아 배열에 저장
        }
        
        int sum = 0; // 합계를 저장할 변수
        for(int i = 0; i < scores.Length; i++) // 배열의 길이만큼 반복
        {
            sum += scores[i]; // 학생의 성적을 합계에 더함
        }

        double average = (double)sum / scores.Length; // 평균을 계산
        Console.WriteLine("학생들의 평균 점수는 " + average + "점입니다."); // 평균 출력
    }

    public static void GuessTheNumbers()
    {
        Random random = new Random();  // 랜덤 객체 생성
        int[] numbers = new int[3];  // 3개의 숫자를 저장할 배열

        // 3개의 랜덤 숫자 생성하여 배열에 저장
        for (int i = 0; i < numbers.Length; i++)
        {
            numbers[i] = random.Next(1, 10);
        }

        int attempt = 0;  // 시도 횟수 초기화
        while (true)
        {
            Console.Write("3개의 숫자를 입력하세요 (1~9): ");
            int[] guesses = new int[3];  // 사용자가 입력한 숫자를 저장할 배열

            // 사용자가 입력한 숫자 배열에 저장
            for (int i = 0; i < guesses.Length; i++)
            {
                guesses[i] = int.Parse(Console.ReadLine());
            }

            int correct = 0;  // 맞춘 숫자의 개수 초기화

            // 숫자 비교 및 맞춘 개수 계산
            for (int i = 0; i < numbers.Length; i++)
            {
                for (int j = 0; j < guesses.Length; j++)
                {
                    if (numbers[i] == guesses[j])
                    {
                        correct++;
                        break;
                    }
                }
            }

            attempt++;  // 시도 횟수 증가
            Console.WriteLine("시도 #" + attempt + ": " + correct + "개의 숫자를 맞추셨습니다.");

            // 모든 숫자를 맞춘 경우 게임 종료
            if (correct == 3)
            {
                Console.WriteLine("축하합니다! 모든 숫자를 맞추셨습니다.");
                break;
            }
        }
    }

    // 2차원 배열
    // 2차원 배열은 행과 열로 이루어진 배열
    // 2차원 배열은 배열의 배열로 구성
    // 2차원 배열은 행과 열을 사용하여 요소에 접근
    // 2차원 배열은 중첩된 for문을 사용하여 요소를 순회
    // 2차원 배열은 foreach문을 사용하여 요소를 순회
    // 2차원 배열은 배열 초기화식을 사용하여 요소를 초기화
    // 2차원 배열은 가변 배열을 사용하여 크기를 변경할 수 있는 배열을 생성
    // 2차원 배열을 사용하여 맵을 구현 할 수 있음
    public static void ArrayMap2D()
    {
        int[,] map = new int[5, 5] // 5x5 크기의 2차원 배열 생성
        {
            {1, 1, 1, 1, 1},
            {1, 0, 0, 0, 1},
            {1, 0, 0, 0, 1},
            {1, 0, 0, 0, 1},
            {1, 1, 1, 1, 1}
        };

        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 5; j++)
            {
                if (map[i,j] == 1)
                {
                    Console.Write("■");
                }
                else
                {
                    Console.Write("□");
                }
            }
            Console.WriteLine();
        }

    }

    // 컬렉션(Collection)자료를 모아 놓은 데이터 구조를 의미
    // 컬렉션은 배열과 달리 크기를 변경할 수 있음
    // 컬렉션은 요소를 추가, 삭제, 검색, 정렬 등 다양한 기능을 제공
    // 컬렉션은 제네릭(Generic)을 사용하여 데이터 타입을 지정
    // 컬렉션은 List, Dictionary, Queue, Stack, HashSet, LinkedList 등 다양한 종류가 있음
    // 컬렉션은 LINQ(Language Integrated Query)를 사용하여 데이터를 쿼리

    // List
    // List는 배열과 유사한 컬렉션
    // List는 크기를 변경할 수 있는 배열
    // List는 요소를 추가, 삭제, 검색, 정렬 등 다양한 기능을 제공
    // List는 제네릭(Generic)을 사용하여 데이터 타입을 지정
    // List는 List<T> 형태로 사용
    // List는 요소를 추가할 때 Add 메서드 사용
    // List는 요소를 삭제할 때 Remove 메서드 사용
    // List는 요소를 순회할 때 for문, foreach문 사용
    public static void WhatIsList()
    {
        List<int> list = new List<int>(); // int형 요소를 가진 List 생성
        list.Add(1); // 요소 추가
        list.Add(2); // 요소 추가
        list.Add(3); // 요소 추가

        list.Remove(2); // 요소 삭제

        for(int i = 0; i < list.Count; i++) // List의 길이만큼 반복
        {
            Console.WriteLine(list[i]); // 요소 출력
        }
        foreach (int i in list) // List 순회
        {
            Console.WriteLine(i); // 요소 출력
        }
    }
    
    // Dictionary
    // Dictionary는 키와 값으로 이루어진 컬렉션
    // Dictionary는 해시 테이블을 사용하여 데이터를 저장
    // Dictionary는 제네릭(Generic)을 사용하여 데이터 타입을 지정
    // Dictionary는 Dictionary<TKey, TValue> 형태로 사용
    // Dictionary는 요소를 추가할 때 Add 메서드 사용
    // Dictionary는 요소를 삭제할 때 Remove 메서드 사용
    // Dictionary는 요소를 검색할 때 ContainsKey, ContainsValue 메서드 사용
    // Dictionary는 요소를 순회할 때 foreach문 사용
    public static void WhatIsDictionary()
    {
        Dictionary<string, int> dict = new Dictionary<string, int>(); // string과 int형 요소를 가진 Dictionary 생성
        dict.Add("apple", 1); // 요소 추가
        dict.Add("banana", 2); // 요소 추가
        dict.Add("cherry", 3); // 요소 추가

        dict.Remove("banana"); // 요소 삭제

        foreach (KeyValuePair<string, int> pair in dict) // Dictionary 순회
        {
            Console.WriteLine(pair.Key + ": " + pair.Value); // 요소 출력
        }
    }

    // Stack
    // Stack은 후입선출(LIFO, Last In First Out) 구조
    // Stack은 요소를 추가할 때 Push 메서드 사용
    // Stack은 요소를 삭제할 때 Pop 메서드 사용
    // Stack은 요소를 확인할 때 Peek 메서드 사용
    // Stack은 요소를 순회할 때 foreach문 사용
    public static void WhatIsStack()
    {
        Stack<int> stack = new Stack<int>(); // int형 요소를 가진 Stack 생성
        stack.Push(1); // 요소 추가
        stack.Push(2); // 요소 추가
        stack.Push(3); // 요소 추가

        stack.Pop(); // 요소 삭제

        foreach (int i in stack) // Stack 순회
        {
            Console.WriteLine(i); // 요소 출력
        }
    }

    // Queue
    // Queue는 선입선출(FIFO, First In First Out) 구조
    // Queue는 요소를 추가할 때 Enqueue 메서드 사용
    // Queue는 요소를 삭제할 때 Dequeue 메서드 사용
    // Queue는 요소를 확인할 때 Peek 메서드 사용
    // Queue는 요소를 순회할 때 foreach문 사용
    public static void WhatIsQueue()
    {
        Queue<int> queue = new Queue<int>(); // int형 요소를 가진 Queue 생성
        queue.Enqueue(1); // 요소 추가
        queue.Enqueue(2); // 요소 추가
        queue.Enqueue(3); // 요소 추가

        queue.Dequeue(); // 요소 삭제

        foreach (int i in queue) // Queue 순회
        {
            Console.WriteLine(i); // 요소 출력
        }
    }


}
728x90
반응형

'C#' 카테고리의 다른 글

C# 클래스와 객체  (0) 2025.02.13
C# 메서드(Method)와 구조체(Structures)  (0) 2025.02.11
C# 조건문과 반복문  (0) 2025.02.10
C# 문자열 처리  (0) 2025.02.10
C# 연산자는 무엇인가?  (0) 2025.02.09