[ 목차 ]
벌써 5일 차까지 왔습니다..
작성일은 5일 차보다 한참 뒤이지만
5일 동안 정말 많은 것을 배웠다는 생각과
역시...
독학을 했으면 절대 못했을 것 같다.
오늘도 힘차게 달려보자고!
1. 배열
배열이 무엇인가!?
같은 타입의 데이터가 연속된 메모리 공간에 저장하는 것이다.
묶어서 하나의 이름으로 관리한다는 것이다.
배열은 선언 방법이 3가지 있다.
- 간단한 선언과 초기화
- 크기만 지정, 초기값 x
- 초기화와 함께 선언
//배열 선언 방법 3가지
int[] numbers = { 1, 2, 3 }; //배열은 중괄호로 담고, 간단한 선언과 초기화
int[] numbers2 = new int[3]; //크기만 지정, 초기값은 지정하지 않는다.
int[] numbers3 = new int[] { 1, 2, 3 }; //초기화와 함께 선언 --> 개수를 보면서 메모리에 넣어짐
for(int i =0; i<3; i++)
{
Console.WriteLine(numbers[i]);
}
배열에서의 중요한 점은 [3] 크기를 지정했다면
0부터 시작한다.
[3] 이면 3개의 배열인데,
순서는 0 1 2 이다.
//배열
//중요한 점: 0부터 시작한다.
int[] num = new int[3]; //3개 메모리를 만들겠다. new = 할당
num[0] = 10;
num[1] = 20;
num[2] = 30;
//3개를 넘어가면 안됨.
Console.WriteLine(num[0]);
Console.WriteLine(num[1]);
Console.WriteLine(num[2]);
문자열의 배열도
변수 타입만 바꾸고 선언하면 된다.
반복문과 함께 출력하면
일일이 입력하는 것보다
편리하게 출력할 수 있다.
string[] fruits = { "사과", "바나나", "오렌지" }; //문자열의 배열
for (int i = 0; i < 3; i++)
{
Console.WriteLine(fruits[i]); //꺼내야 하는 번호 i = 인덱스
//0번 : 사과, 1번: 바나나, 2번: 오렌지
}
이것을 응용해 보자!
3명의 국어, 영어, 수학 점수를 입력받고 총점과 평균 출력을 실습해 보자.
우선 3명!
배열로 3명을 각각 국어 3명, 영어 3명, 수학 3명을 선언한다.
그 이후에 3개의 총점과 3개의 평균을 선언한다.
평균은 실수형으로 한다.
그 뒤에 반복문으로
사용자로부터 입력받는 메서드로 출력한다.
//응용 실습
//3명의 국어, 영어, 수학 점수를 입력받고 총점과 평균을 출력하세요.
int[] iKor = new int[3]; //국어 점수 3명
int[] iEng = new int[3]; //영어 점수 3명
int[] iMath = new int[3]; //수학 점수 3명
int[] sum = new int[3]; //3개의 총점
float[] aver = new float[3]; //3개의 평균
for (int i = 0; i < 3; i++)
{
//학생 입력 받기
Console.WriteLine("학생 성적 입력하세요 ");
Console.Write("국어: ");
iKor[i] = int.Parse(Console.ReadLine()); //0번에 점수 입력
Console.Write("영어: ");
iEng[i] = int.Parse(Console.ReadLine()); //0번에 점수 입력
Console.Write("수학: ");
iMath[i] = int.Parse(Console.ReadLine()); //0번에 점수 입력
// 입력을 3번 받고 3번 돌림
sum[i] = iKor[i] + iEng[i] + iMath[i];
aver[i] = (float)sum[i] / 3; //총합의 나누기 3을 통해 실수형으로 변환 후 평균 구하기
}
//출력
for (int i = 0; i < 3; i++)
{
Console.WriteLine((i + 1) + "번 학생");
Console.WriteLine($"국어: {iKor[i]} 영어: {iEng[i]} 수학: {iMath[i]}");
Console.WriteLine("총점: " + sum[i]);
Console.WriteLine("평균: " + aver[i].ToString("F2")); //소수점 2번째자리까지 보여주세요.
}
2. 1차원 배열
1차원 배열은 가장 기본적인 배열이다.
위에 말한 배열이 곧 1차원 배열이기도 하다.
반복문을 통해 출력을 할 때
조건식의 개수를 입력하기 번거로울 때가 있다.
그럴 때에
Length 속성을 사용하면
배열의 개수를 알아서 세어준다.
int[] score = new int[3];
score[0] = 90;
score[1] = 85;
score[2] = 88;
for (int i = 0; i < score.Length; i++) //score.Length = 3, 배열이 몇개인지 잘 모를때를 위해 유용하게 쓰이는 것, 배열 전체
{
Console.WriteLine($"점수 {i + 1} : {score[i]}");
}
3. 2차원 배열
2차원 배열은?
2차원은 표로 생각해 보면 쉽다.
int[,] matrix = new int[2, 3] //좌표에서 반대로 된 느낌 3이 가로, 2가 세로 총 6개
위의 배열 선언을 해주면 예시로
가로3 , 세로2
{1 2 3}
{4 5 6}
이렇게 언뜻 보면 표와 비슷하니
앞 숫자가 세로, 뒷 숫자가 가로인 것을 기억하면 된다.
//2차원 배열 선언
int[,] matrix = new int[2, 3] //좌표에서 반대로 된 느낌 3이 가로, 2가 세로 총 6개
//{
// //[2,3]의 예시
// {1,2,3 },
// {4,5,6 }
//};
{{1,2,3},{4,5,6}};
for (int i = 0; i < 2; i++) //i가 0잍 때, j의 반복문 다 돌고 i 반복문으로 돌아와 3번 반복
{
Console.WriteLine("i = " + i);
for (int j = 0; j < 3; j++)
{
Console.WriteLine("j = " + j);
}
for (int j = 0; j < 3; j++)
{
Console.Write($"{matrix[i, j]}");
}
Console.WriteLine();
}
이러한 2차원 배열을 활용해서 실습을 해보자
선언할 때 2개의 박스를 가져온다고 하면
각각 박스에 3개의 구역으로 나눈다는 것
3개의 구역에 숫자 하나씩 넣어준다.
출력할 때는 배열이니 반복문으로 출력한다.
int[][] matrix = new int[2][]; //2개 박스를 가져오고
matrix[0] = new int[3]; // 1개의 박스 안에 3개의 구역으로 나누었다.
matrix[1] = new int[3];
//값 입력, 박스마다 숫자 하나씩 넣어줌
matrix[0][0] = 1;
matrix[0][1] = 2;
matrix[0][2] = 3;
matrix[1][0] = 4;
matrix[1][1] = 5;
matrix[1][2] = 6;
//출력
for (int i = 0; i < matrix.Length; i++)
{
for (int j = 0; j < matrix[i].Length; j++)
{
Console.Write(matrix[i][j] + " ");
}
Console.WriteLine();
}
4. 가변 배열
보통 표로 생각해 보면 규칙적이다.
하지만 가변 배열에서는 배열의 배열을 한다.
각 행의 길이가 달라질 수 있다는 점이다.
선언할 때 행 자리에 숫자를 넣지 않고,
배열을 직접 선언 및 초기화하면서 유동적으로 숫자를 넣는다.
//가변 배열
//퍼즐류에서 2차원배열 필수!
Console.WriteLine("가변 배열");
int[][] jaggedArray = new int[3][]; //빈 곳을 유동적으로 넣을 것이다.
jaggedArray[0] = new int[] { 1, 2 };
jaggedArray[1] = new int[] { 3, 4, 5 };
jaggedArray[2] = new int[] { 6 };
for (int i = 0; i < jaggedArray.Length; i++)
{
for (int j = 0; j < jaggedArray[i].Length; j++)
{
Console.Write($"{jaggedArray[i][j]}");
Console.WriteLine();
}
}
Console.WriteLine("var 키워드 사용");
var numbers = new[] { 1, 2, 3, 4, 5 };
Console.WriteLine($"배열 타입: {numbers.GetType()}");
5. 소수점 자릿수를 설정하는 포맷
배열과는 다른 이야기이긴 하지만
배운 내용이기에 다룬다!
소수점을 어디까지 보여주고 싶냐!
라는 질문의 해답인 포맷이다.
ToString()으로 value의 실수 값을 문자열로 변환한다.
예를 들어 "F4"는 소수점 뒤에 4자리까지 표시하라는 뜻으로 쓰인다.
반올림도 적용이 된다.
아래의 코드에서는 다양한 방법으로
포맷 출력하는 코드들이다.
double value = 123.456789;
//소수점 자릿수를 설정하는 포맷
Console.WriteLine(value.ToString("F4"));
Console.WriteLine($"소수점 둘째자리: {value:F2}");
Console.WriteLine(String.Format("소수점 둘째자리: {0:F2}", value));
Console.WriteLine(value.ToString("F0")); //소수점 없이 정수만 출력
그리고 실수형에서 숫자를 읽기 쉽게 쉼표로 그룹화하는 것이 있다.
마치 돈 계산 할 때처럼 쉼표가 들어가는 것이다.
double value = 123_123_213.12323;
Console.WriteLine(value.ToString("N2")); //쉼표 찍는다
6. foreach 반복문
foreach는 해당하는 배열의 개수만큼 반복한다.
코드가 간결하고 가독성이 좋다는 점이 특징이다!
그리고 새로운 변수를 만들어서 대신 순환하게 한다.
string[] fruits = { "사과", "바나나", "체리" };
//반복문
foreach (string fruit in fruits)// 새로운 변수를 만들어서 대신 순환하게함
{
Console.WriteLine(fruit);
}
7. var
var는 값에 따라 변수가 달라지는 것이다.
내가 봤을 땐 자유로운 영혼 같은 느낌이었다..
예시로 아래 코드를 살펴보면
스스로 현재 정수가 초기값인 것으로 보아 int 정수형 타입으로 달라진다.
var numbers = new[] { 1, 2, 3, 4, 5 };
Console.WriteLine("배열 타입 : " + numbers.GetType());
인트타입으로 바뀜!
오늘은 배열에 대해서 배워보았다.
솔직히 배열을 처음 마주했을 때는.. 이해가 가면서도 안 가기도 하고..
행과 열이 어딘지 헷갈리고..
중구난방이었다. 완전.
머릿속이 텅 빌 정도로...
지금도 충분히 부족하지만,
예제문제와 실습 많이 해서
익숙해지도록 해야겠다...😢
'Development > 멋쟁이사자처럼 게임개발 부트캠프' 카테고리의 다른 글
[멋쟁이사자처럼 Unity 게임 부트캠프 4기] 6일차 - 네임스페이스 & 열거형 & 구조체 (0) | 2025.03.07 |
---|---|
[멋쟁이사자처럼 Unity 게임 부트캠프 4기] 5일차 & 6일차 - 함수 (0) | 2025.03.07 |
[멋쟁이사자처럼 Unity 게임 부트캠프 4기] 4일차 (2) - 반복문 (0) | 2025.03.05 |
[멋쟁이사자처럼 Unity 게임 부트캠프 4기] 4일차 (1) - switch 문 (0) | 2025.03.05 |
[멋쟁이사자처럼 Unity 게임 부트캠프 4기] 3일차 (2) - 조건문 (0) | 2025.03.04 |