배열
// 배열
int[] array1 = new int[5]; // 크기가 5인 int형 배열 선언
string[] array2 = new string[3]; // 크기가 3인 string형 배열 선언
int num = 0;
array1[0] = 1; // 배열 초기화 - 보통 for문 등 반복문 사용
array1[1] = 2;
array1[2] = 3;
array1[3] = 4;
array1[4] = 5;
// 배열 예제
num = array1[0];
int[] itemPrices = { 100, 200, 300, 400, 500 };
int totalPrice = 0;
for (int i = 0; i < itemPrices.Length; i++)
{
totalPrice += itemPrices[i];
}
Console.WriteLine("총 아이템 가격: " + totalPrice + " gold");
배열 예제
// 게임캐릭터 능력치 만들기
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]);
// 학생들의 성적 평균 구하기
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 + "입니다."); // 성적 평균 출력
// 배열을 활용한 숫자 맞추기 게임
Random random = new Random(); // 랜덤 객체 생성
int[] numbers = new int[3]; // 3개의 숫자를 저장할 배열
for (int i = 0; i < numbers.Length; i++) // 3개의 랜덤 숫자 생성하여 배열에 저장
{
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차원, 3차원 등의 형태의 배열을 의미
- C#에서는 다차원 배열을 선언할 때 각 차원의 크기를 지정하여 생성한다.
// 2차원 배열의 선언과 초기화
int[,] array3 = new int[2, 3]; // 2행 3열의 int형 2차원 배열 선언
// 다차원 배열 초기화
array3[0, 0] = 1;
array3[0, 1] = 2;
array3[0, 2] = 3;
array3[1, 0] = 4;
array3[1, 1] = 5;
array3[1, 2] = 6;
// 선언과 함께 초기화
int[,] array2D = new int[3, 4] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
3차원 이상은 잘 사용하지 않는다.
// 3차원 배열의 선언과 초기화
int[,,] array3D = new int[2, 3, 4]
{
{ { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } },
{ { 13, 14, 15, 16 }, { 17, 18, 19, 20 }, { 21, 22, 23, 24 } }
};
다차원 배열 예제
int[,] map = new int[5, 5];
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
map[i, j] = i + j;
}
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
Console.Write(map[i, j] + " ");
}
Console.WriteLine();
}
- 다차원 배열을 활용하면 복잡한 데이터 구조를 효율적으로 관리할 수 있다.
- 2차원 배열은 행과 열로 이루어진 데이터 구조를 다루기에 적합하다.
- 3차원 배열은 면, 행, 열로 이루어진 데이터 구조를 다루기에 적합하다.
// 게임 맵 구현
int[,] map = new int[5, 5]
{
{ 1, 1, 1, 1, 1 },
{ 1, 0, 0, 0, 1 },
{ 1, 0, 1, 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();
}
컬렉션
자료를 모아놓은 데이터 구조
- 컬렉션은 배열과 비슷한 자료 구조
- 배열과는 다르게 크기가 가변적
- C#에서는 다양한 종류의 컬렉션을 제공
- 사용하기 위해서는 System.Collections.Generic 네임스페이스를 추가
List(리스트)
동적 배열. List를 생성할 때 담을 자료형을 지정해야한다.
List<int> numbers = new List<int>(); // 빈 리스트 생성
numbers.Add(1); // 리스트에 데이터 추가
numbers.Add(2);
numbers.Add(3);
numbers.Remove(2); // 리스트에서 데이터 삭제
for (int i = 0; i < numbers.Count; i++) // 리스트 데이터 출력 - for문
{
Console.WriteLine(numbers[i]);
}
foreach (int number in numbers) // 리스트 데이터 출력 - foreach문
{
Console.WriteLine(number);
}
Dictionary(딕셔너리)
키와 값으로 구성된 데이터 저장. 중복된 키를 가질 수 없고, 키와 값의 쌍을 이룬다.
Dictionary<string, int> scores = new Dictionary<string, int>(); // 빈 딕셔너리 생성
scores.Add("Alice", 100); // 딕셔너리에 데이터 추가
scores.Add("Bob", 80);
scores.Add("Charlie", 90);
scores.Remove("Bob"); // 딕셔너리에서 데이터 삭제
foreach(KeyValuePair<string, int> pair in scores) // 딕셔너리 데이터 출력
{
Console.WriteLine(pair.Key + ": " + pair.Value);
}
Stack
후입선출(LIFO) 구조를 가진 자료 구조
Stack<int> stack1 = new Stack<int>(); // int형 Stack 선언
stack1.Push(1); // Stack에 요소 추가
stack1.Push(2);
stack1.Push(3);
int value = stack1.Pop(); // Stack에서 요소 가져오기
Queue
선입선출(FIFO) 구조를 가진 자료 구조
Queue<int> queue1 = new Queue<int>(); // int형 Queue 선언
queue1.Enqueue(1); // Queue에 요소 추가
queue1.Enqueue(2);
queue1.Enqueue(3);
int value = queue1.Dequeue(); // Queue에서 요소 가져오기
HashSet
중복되지 않은 요소들로 이루어진 집합
HashSet<int> set1 = new HashSet<int>(); // int형 HashSet 선언
set1.Add(1); // HashSet에 요소 추가
set1.Add(2);
set1.Add(3);
foreach (int element in set1) // HashSet에서 요소 가져오기
{
Console.WriteLine(element);
}
'부트캠프 > Study' 카테고리의 다른 글
C# 문법 2강 - 문제 풀이 (0) | 2023.11.08 |
---|---|
C# 문법 2강(3) - 메서드와 오버로드, 구조체 (0) | 2023.11.07 |
C# 문법 2강(1) - 조건문 / 반복문 (0) | 2023.11.07 |
C# 문법 1강 - 연산자 / 문자열 (1) | 2023.11.06 |
Git과 GitHub 추가 설명 (0) | 2023.11.01 |