본문 바로가기
[ Program ]/c#스터디

23.배열2

by 관이119 2021. 10. 9.

그림1

 

앞에서 배운 배열은 1차원 배열이다.

 

그림1에서 보면 빨간색 네모 각각이 데이터라고 생각하면 된다.

1차원은 데이터를 한줄로 나열한것이고 2차원은 엑셀처럼 가로세로 , 3차원은 2차원의 각각의 셀에 다시 1차원처럼 데이터를 나열한것이다.

실제로 프로그램 하다보면 게임 프로그램이 아닌경우는 2차원배열이나 3차원배열을 사용할경우는 잘없다.

나중에 오픈cv 를 공부하다보면 그나마 영상을 저장하거나 할때 2차원배열이 필요할걸로 생각된다.

다차원 배열선언은 다음과 같다.

 

// 1차원 배열

string[] players = new string[10];

string[] Regions = { "서울", "경기", "부산" };

 

// 2차원 배열

string[,] Depts = {{"김과장", "경리부"},{"이과장", "총무부"}};

 

// 3차원 배열

string[,,] Cubes;

 

그런데 실제로 c# 에서는 배열자체문법을 사용하는일이 잘 없다.

제네릭으로 주로 사용하는데 이는 나중에 다시 설명한다.

 

형식만 다르고 사용법이나 구조는 1차원배열을 늘려놓은것과 같다.

 

배열의 전체 길이를 구할때는 .length 나 .count 를 사용하는데 그냥 둘다 외워두면 편하다.

length 로 찾아서 없을때는 count 로 쓴다고 생각하면된다.

사용법은 다음과 같다.

string[] tempar = new string[20];

int arlen = tempar.length;

위와 같이해주면 배열의 길이를 구할수 있다.

길이를 이미 알고있는데 길이가 왜 필요하냐고 생각할수 있다.

아래 프로그램을 만들어보며 전체적인 이해를 해보자.

 

 

하나의 프로그램을 생각해보자

1~100 까지의 숫자중 3의 배수인숫자의 합계를 출력하는 프로그램을 만든다.

배열을 제외하고 지금까지 배운것으로만 만들려면 상당한 고충이 있을것이다.

내용을 설명하려다가 지우고 숙제로 남겨뒀다.

 

위프로그램을 배열로 만들어보자.

처음 숫자를 변수로 지정하는 부분부터 다르다.

int[] numbers= new int[100];

for(int i =0;i<100;i++)

{

    numbers[i] = i+1;

}

이렇게만 해줘도 numbers 라는 배열에 100개의 숫자가 다들어간것이다.

 

이제 비교하는 부분을 보자

int result = 0;

for(int i =0;i<numbers.length;i++)

{

    if( numbers[i] %3 == 0)

    {

        result+=numbers[i];

    }

}

배열을 0부터 최대길이까지 반복하면서 각각의 숫자가 3의 배수인지 확인하고 3의 배수일경우 최종결과값인 result 에 값을 더해준것이다.

이제 result 만 출력해주면 프로그램이 끝난다.

소스를 하나씩 뜯어보자.

 

int result = 0;

가장 기본적인 int 타입으로 3의 배수들의 숫자들을 합치기 위해 지정한 변수다.

기본값은 0으로 지정했다.

 

for(int i =0;i

{

}

반복문을 실행하는데 배열은 0부터 시작하기때문에 습관적으로 시작값은 0으로 써주면 된다.

왜냐하면 저 i 를 반복문 내부에서 배열에 접근하는데 사용할것이기 때문이다.

결국 0부터 배열의 길이만큼 반복한다는 코드이다.

중간에 i

배열길이가 2개일경우로 생각해보면 간단한데 0부터 시작할경우 배열길이보다 하나 작을때까지만 반복해줘야 한다.

a,b 의 내용이 있는 배열일 경우 길이는 2이고 0번값은 a 1번값은 b 가 된다.

만약 for(int i =0;i<=numbers.length;i++) 이렇게 길이만큼 해준다면 오류가 발생한다.

위 a,b 배열의 경우 2번값은 배열에 존재하지 않기 때문이다.

어려운내용이 아니니 천천히 생각해보기 바란다.

 

 if( numbers[i] %3 == 0)

 {

 }

조건문도 앞에서 연습을 충분히 해서 이해하기 어렵지 않을거라 생각한다.

numbers 배열에 있는 값중 i 번째의 값이 3으로 나눠서 나머지값이 0인지 판별한다는 의미이다.

3으로 나눠서 나머지값이 0이라는말은 결국 3의 배수라는 의미이다.

 

result+=numbers[i];

마지막으로 result 라는 int 타입의 변수에 numbers 배열의 해당값을 계속 더해주는 내용이다.

 

 

최종적으로 코드를 보면

int[] numbers= new int[100];

int result = 0;

for(int i =1;i<=100;i++)

{

    numbers[i] = i

}

 

for(int i =0;i<numbers.length;i++)

{

    if( numbers[i] %3 == 0)

    {

        result+=numbers[i];

    }

}

 

MessageBox.Show(result.ToString());

 

위와 같이 만들수있다.

물론 배열을 사용하지않고 

int result = 0;

for(int i =1;i<=100;i++)

{

    if( i%3 == 0)

    {

        result+=i;

    }

}

MessageBox.Show(result.ToString());

 

이런형태도 가능하다.

 

지금예제의 경우는 간단한 내용이라 아래코드 훨씬간단하고 좋은코드이지만 1~100 까지의 값으로 여러군데서 사용하다가 갑자기 1~1000까지로 해서 값을 확인해야 할경우라면 아래코드는 사용한 모든곳을 바꿔야 겠지만 배열을 사용한 코드는 배열에 값만 추가해주면 된다.

 

 

 

***숙제 :

1. 배열을 사용하지않고 1~10까지 숫자중 4의 배수인 숫자의 합계를 출력하는 프로그램을 만들어볼것 , 1~ 10까지 각각의 변수로 지정할것.

2. 배열을 이용하여  1~10000까지 숫자의 합계를 구해보자.

'[ Program ] > c#스터디' 카테고리의 다른 글

25.사칙연산기 만들기  (0) 2021.10.09
24.반복문2 - while , foreach  (0) 2021.10.09
22.배열1  (0) 2021.09.26
21.반복문1 - for  (0) 2021.09.26
20.조건문(분기문) 실습1  (0) 2021.09.20

댓글