배열의 선언, 입력, 출력 (정수형 편)- 긴글 주의!!-
본문 바로가기
알고리즘 모음집/알고리즘 (Algorithm)

배열의 선언, 입력, 출력 (정수형 편)- 긴글 주의!!-

by KyeongMin 2019. 7. 7.
728x90
반응형

오늘은 배열의 선언에 대해서 소개해드리겠습니다.

1. 일반적인 배열 선언 방식

2. 동적할당 배열 선언 방식

3. 백터를 이용한 선언 방식 

 

3가지에 대해서 소개해드리겠습니다

 

1. 일반적인 배열 선언 방식

 

   1차원 배열

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
int main(void) {
    int arr[4];// 일차원 배열 선언
    for (int i = 0; i < 4; i++) {// 일차원 배열 입력
        scanf("%d"&arr[i]);
      //scanf("%d", arr + i);
    }
    for (int i = 0; i < 4; i++) {// 일차원 배열 출력
        printf("%2d", arr[i]);
      //printf("%2d", *arr + i);
    }
    return 0;
}
 

선언시

 

입력시 

출력시

두개 방식으로 써도 같습니다.

배열이름 자체에 주소값을 가지기때문에 arr 에 몇번째에 입력을 하겠다는 의미로 생각하시면됩니다.

출력시는 포인터를 할때 포인터변수의 자료를 쓰려면 asterisk( 에스크리터 == * ) 을 사용하는 개념이라고 생각하시면 편합니다

 

이차원 배열은 어떻게 선언하는지 알아 보겠습니다.

 

  2차원배열

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<stdio.h>
int main(void) {
    int arr[4][4];// 이차원 배열 선언
    for (int i = 0; i < 4; i++) {// 이차원 배열 입력
        for (int j = 0; j < 4; j++) {
            scanf("%d"&arr[i][j]);
          //scanf("%d", arr[i] + j);
        }
    }
    for (int i = 0; i < 4; i++) {// 이차원 배열 출력
        for (int j = 0; j < 4; j++) {
            printf("%2d", arr[i][j]);
          //printf("%2d", *(arr[i] + j));
        }
        printf("\n");
    }
    return 0;
}
 
 

선언 시

입력 시

 

출력 시

여기까지는 누구라도 쉽게 배울수 있고 알고있는 방식입니다.

 

2. 동적할당 배열 선언 방식

 

일차원 배열 동적할당 방식은 할당하는 방식 과 해제하는 방식에 대해서 설명드리겠습니다.

 

  1차원 배열 (할당 및 해제 )

 

 

선언 시

malloc 스타일

new 스타일

입력 시

출력 시

해제 시

말록함수를 이용해야하기 때문에 

#include<malloc.h>  헤더파일을 선언해야합니다.

여기서 malloc함수는 원래 void 형을 리턴하기때문에 인트형으로 쓰고 싶으면 

int형으로 형변환을 해야하는데 이때 사용하는것이 캐스팅이라는 자료형 변환을 

사용합니다. 위에를 보시면 (int *) 가 캐스팅을 한것인데

앞에 변수의 자료형에 맞게 형변환을 하시면 됩니다.

char b;

int a =(int) b;

 

int b;

char a = (char)b;

 

형을 변환 해주고 자료형에 맞게쓸수 있는것입니다. 

 

동적할당을 이용한 이차원 배열은 어떻게 할까요?

아래를 봐봅시다.

 

  2차원 배열 ( 할당 및 해제)

 

선언 시

malloc 스타일

 

new 스타일

입력 시

 

출력 시

해제 시

선언만 다를뿐 입력과 출력은 동일하다고 생각하시면됩니다.

대신 이차원은 이중포인터를 이용해서 행을 만들고 그행에 말록을 원하는만큼 할당해서 이차원 배열같이 사용한다고 

생각하시면 됩니다.

 

동적할당에서 2차원 배열은 저렇게 포문으로 없애는것이 다소 귀찮고 시간을 잡아 먹는다 생각을 한다면 

선언과 해제를 이런식으로 하기를 추천합니다.

 

선언 및 할당

해제 

포문을 쓰지 않고 바로 해제를 할수 있습니다. 편한것 사용하면 좋을것 같습니다.

주의 할점은 malloc과 new 쓰임은 같은데 완전 똑같다고 할 수 없습니다. 물론 free랑 delete도 그렇구요

그 상세한점은 많은 분들이 궁금해하시면 포스팅해드리고 기다리기 귀찮다는분들은 다른 블로그에도 정리 잘되어 

있으니 참고해주세요.!!

 

3. 백터를 이용한 선언 방식 

 

1차원 배열 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>
#include<vector>
using namespace std;
int main(void) {
    vector<int> arr(4);//일차원 배열 선언
    for (int i = 0; i < 4; i++) {// 일차원 배열 입력
        scanf("%d"&arr[i]);
      //scanf("%d", arr + i);
    }
    for (int i = 0; i < 4; i++) {// 일차원 배열 출력
        printf("%2d", arr[i]);
    //    printf("%2d", *arr + i);
    }
}
 
 

헤더 파일에 #include<vector>를 선언해서 사용하면됩니다.

선언 시

간단히 선언이 됩니다.

입력방식은 원래 하던 방식으로 해도되지만 

 위와 같은 방법으로 하셔도됩니다.

 

2차원 배열 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<stdio.h>
#include<vector>
using namespace std;
int main(void) {
    vector<vector<int> > arr(4vector<int>(40));// 이차원 백터배열 선언 
    for (int i = 0; i < 4; i++) {// 이차원 백터배열 입력
        for (int j = 0; j < 4; j++) {
            scanf("%d"&arr[i][j]);
            //scanf("%d", arr[i] + j);
        }
    }
    for (int i = 0; i < arr.size(); i++) {// 이차원 백터배열 출력
        for (int j = 0; j < arr[0].size(); j++) {
            printf("%2d", arr[i][j]);
            //printf("%2d", *(arr[i] + j));
        }
        printf("\n");
    }
 
    return 0;
}
 
 

2차원 백터 역시 간단하게 

 

선언 시

입력 출력은 원래 배열쓰듯이 사용해도됩니다.

push_back()이라는 자체 백터의 함수를 사용시 하는 선언과 입력 방식입니다.

 

벡터안에 쓸수 있는 컨테이너가 여러개 있는데 

여기서는 간단하게 배열의 길이를 측정하는 것만 소개해드리겠습니다.

 

일차원 백터의 경우에는 arr.size(); 이렇게 하면 일차원배열의 길이가 구해지지만

 

이차원의 경우는 행과 열로 되어있으므로 행을 구한다면 즉 세로 는 arr.size(); 로하면되고

                                                                            가로 는 arr[0].size();로 하면 됩니다.

 

알고리즘이나 코딩할때 상황에 맞게 그냥 배열이나 동적할당배열, 백터를 사용하시면 됩니다.

물론 3개다 사용하면 좋겠죠? 

다른 궁금한점은 질문해주시면 해보고 답변드리도록 하겠습니다.

728x90
반응형

'알고리즘 모음집 > 알고리즘 (Algorithm)' 카테고리의 다른 글

백준 17140 이차원 배열과 연산  (0) 2019.07.09
백준 1759 암호만들기  (0) 2019.07.09
백준 2580 스도쿠  (0) 2019.07.04
백준 16235 나무재태크  (0) 2019.07.04
백준 9663 N-Queen  (0) 2019.07.03

댓글