배열 (2)
지난 시간
다차원 배열
축이 두개 이상인 배열
요소(element)
[0, n]
[1, n]
[2, n]
[n, 0]
[n, 1]
[n, 3]
선언
자료형[,...,] 변수명
ex) int[,] array, char[,,]
초기화
변수명 = new 자료형[1차원 크기,..., n차원 크기]
ex) array = new int[2, 2]{{1, 2}, {3, 4}}
array = new char[5, 6, 7]
using System;
class Program
{
static void Main(string[] args)
{
int[,] intArray;
char[,,] charArray;
intArray = new int[5, 3];
charArray = new char[5, 6, 7];
}
}
접근
변수명[1차원 인덱스, ... , n차원 인덱스]
ex) array[1, 2], array[1, 5, 6]
범위 접근
for(int i = 0; i < 6; i++)
{
for(int j = 0; j < 5; j++)
{
Console.WriteLine(array[i, j]);
}
}
using System;
class Program
{
static void Main(string[] args)
{
int[,] intArray = new int[2, 2]{{1, 2}, {3, 4}};
Console.WriteLine(intArray[1, 1]);
for(int i = 0; i < 2; i++)
{
for(int j = 0; j < 2; j++)
{
Console.WriteLine(intArray[i , j]);
}
}
}
}
Q.
2차원 배열([9, 9])에서 [n, m]에 n*m의 값을 넣자.
hint.
예전에 푼 구구단 출력문제와 똑같다.
대신 출력을 하지 않고 배열안에 넣을 뿐이다.
가변 배열
배열의 요소가 배열
선언과 초기화
자료형[][] = new 자료형[크기][]
{
new int[크기]{요소,...}
new int[크기]{요소,...}
....
};
자료형[][] = new 자료형[크기][];
(자료형[])[] = new (자료형[크기])[];
선언과 초기화 예시
int[][] array = new int[3][]
{
new int[2]{1, 2},
new int[3]{1, 4, 2},
new int[3]{3, 4, 2)
};
using System;
class Program
{
static void Main(string[] args)
{
int[][] array = new int[3][]
{
new int[2]{1, 2},
new int[3]{1, 4, 2},
new int[3]{3, 4, 2)
};
Console.WriteLine(array[0][1]);
}
}
접근
자료형[1차원 인덱스][2차원인덱스];
ex) array[3][4], array[5][3][4]
범위 접근
for(int i = 0; i < 6; i++)
{
for(int j = 0; j < 5; j++)
{
Console.WriteLine(array[i][j]);
}
}
using System;
class Program
{
static void Main(string[] args)
{
int[,] intArray = new int[2][2]
{
new int[2]{1, 2},
new int[2]{3, 4}
};
Console.WriteLine(intArray[1][1]);
for(int i = 0; i < 2; i++)
{
for(int j = 0; j < 2; j++)
{
Console.WriteLine(intArray[i][j]);
}
}
}
}
Q.
2차원인 가변 배열([9, 9])에서 [n][m]에 n*m의 값을 넣자.
다차원 배열 vs 가변 배열
메모리 낭비를 줄이기 위해
가변배열 사용!
리스트(list)
원소를 추가할 때마다 크기가 늘어나는 배열
선언 및 초기화
List<자료형> 변수명 = new List<자료형>();
ex) List<int> list = new List<int>();
List<char> list = new List<char>();
추가
리스트변수명.Add(자료형 값);
ex) list.Add(1); list.Add('A');
접근
리스트변수명[인덱스]
ex) list[0]; list[1];
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(4);
Console.WriteLine(list[0]);
}
}
제거
특정 원소 제거: 리스트명.Remove(원소 값);
특정 인덱스의 원소 제거: 리스트명.RemoveAt(인덱스);
ex)
list => [0, 1, 2, 3]
list.Remove(0);
list.RemoveAt(0);
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Remove(1);
list.RemoveAt(2);
foreach(int i in list)
{
Console.WriteLine(i);
}
Console.WriteLine(list.Count);
}
}
요소 수 세기
리스트명.Count;
ex) list.Count;
원리
Q. 고객 추첨이벤트를 위해 고객들이 방문할때마다 고객들의 이름을 저장하려고 한다.
고객 리스트 제작 프로그램을 만들어 보자.
입력: 이름이 주어진다.
이때 이 이름을 list에 저장하고 "끝"이라는 단어가 주어지면 입력을 그만둔다.
출력: 입력이 멈춘후 지금까지 있었던 고객의 이름을 한줄마다 모두 출력한다.
Q. 입력받은 값을 거꾸로 출력해보자.
입력: 문자열이 한 줄에 주어진다.
ex) 이것은 문자열 입니다.
출력: 입력된 문자열을 거꾸로 출력한다.
ex) .다니입 열자문 은것이
힌트 1) 문자열은 char형 배열과 같이 접근할 수 있다.
ex)
string str = "이것은 문자열 입니다."
str[0] = '이', str[5]= '자'
힌트 2) 문자열의 길이를 얻을 수 있는 코드가 존재한다.
ex)
string str = "이것은 문자열 입니다."
str.length == 12
배열 (2)
By qwd0214
배열 (2)
- 43