코딩테스트 & 문제 풀이

[C]코드업_1096 : [기초-2차원배열] 바둑판에 흰 돌 놓기

Hicecream 2023. 4. 29. 00:11

2022년 7월 6일에 작성됨

 

https://www.codeup.kr/problem.php?id=1096

 

[기초-2차원배열] 바둑판에 흰 돌 놓기(설명)

C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요.  - 모든 내용

www.codeup.kr

 

 

 

문제 분석

(19x19) 바둑판에서 n개의 흰 돌이 놓인 위치는 1로 표시, 나머지 검은 돌이 놓인 위치는 0으로 표시한다.

 

 

<2차원 배열의 기본 개념>

2차원 배열은 [](대괄호)를 두 번 사용하여 선언하며, 첫 번째 대괄호에는 세로 크기, 두 번째 대괄호에는 가로 크기를 지정한다.

  • 기본 구조: 자료형 배열이름[세로크기][가로크기]={{값, 값, 값},{값, 값, 값}};
int Arr[3][4] = {	// 세로 크기 3, 가로 크기 4인 int형 2차원 배열 선언
{11, 22, 33, 44},
{55, 66, 77, 88},
{99, 110, 120, 130}
};
  • 2차원 배열도 인덱스는 0부터 시작하여, 배열 Arr의 가로 첫 번째, 세로 첫 번째 요소는 Arr[0][0]이 된다.
int Arr[3][4];
Arr[0][0]=11, Arr[0][1]=22, Arr[0][2]=33, Arr[0][3]=44
Arr[1][0]=55, Arr[1][1]=66, Arr[1][2]=77, Arr[1][3]=88
Arr[2][0]=99, Arr[2][1]=110, Arr[2][2]=120, Arr[2][3]=130

 

 

소스 코드 (⭕)

#include <stdio.h>
int main()
{
    int n, i, j, x, y;
    int a[20][20] = { 0, };		// 2차원 배열 선언하고 모두 0으로 초기화

    scanf("%d", &n);			// n개의 흰 돌 개수 입력
    for (i = 1; i <= n; i++) {
        scanf("%d %d", &y, &x);		// 흰 돌 놓을 위치 (y,x)좌표 입력
        a[y][x] = 1;			// 그 흰 돌의 (y,x)좌표 위치는 1로 설정 
    }
    for (i = 1; i <= 19; i++) {		// 한 줄(위에서 아래로) 씩
        for (j = 1; j <= 19; j++) {	// 한 열(왼쪽에서 오른쪽으로) 씩
            printf("%d ", a[i][j]);	// 해당 위치의 값 출력
        }
        printf("\n");			// 한 줄이 끝나면 줄 바꾸기
    }
    return 0;
}

 

코드 분석

1. 세로와 가로의 크기가 각각 20인 2차원 배열을 선언하고 0으로 모두 초기화 시켜준다.

 

2. n개의 흰 돌 개수를 입력하고, 흰 돌을 놓을 위치(y, x)를 n번 입력한다. 그 배열의 위치는 1로 처리되어 흰 돌이 놓인 위치를 알 수 있게 된다.

 

3. 그리고 2번째 for 문에서 1~19까지 i와 j에 차례대로 넣어보면서 0 또는 1을 출려해준다.

 

<참고>

좌표를 (y, x)라고 표시한 이유는 배열에선 arr[i][j]일 때, i값이 y좌표 역할을 하고, j값이 x좌표 역할을 하기 때문이다.

 

 

 

end

2차원 배열 문제를 거의 안풀어봐서 개념 공부를 조금 하고 봤더니 이해가 잘 되었다. 사실 문제 예시에서 정답 코드를 90퍼센트 다 보여주고 있어서 조금만 고치면 됐다ㅋㅋ.. 저래도 되는건가?!