https://www.codeup.kr/problem.php?id=1096
기숙사 생활을 하는 학교에서 어떤 금요일(전원 귀가일)에는 모두 집으로 귀가를 한다.
오랜만에 집에 간 영일이는 아버지와 함께 두던 매우 큰 오목에 대해서 생각해 보다가
"바둑판에 돌을 올린 것을 프로그래밍 할 수 있을까?"하고 생각하였다.
바둑판(19 * 19)에 n개의 흰 돌을 놓는다고 할 때,
n개의 흰 돌이 놓인 위치를 출력하는 프로그램을 작성해보자.
<참고>
가로번호, 세로번호를 사용할 수 있는 2차원 배열을 사용하면
이러한 형태를 쉽게 기록하고 사용할 수 있다. 물론 더 확장한 n차원 배열도 만들 수 있다.
int n, i, j, x, y;
int a[20][20]={};
scanf("%d", &n);
for(i=1; i<=n; i++)
{
scanf("%d %d", &x, &y);
a[x][y]=1;
}
for(i=1; i<=19; i++) //한 줄(위에서 아래로) 씩
{
for(j=1; j<=19; j++) //한 열(왼쪽에서 오른쪽으로) 씩
{
printf("%d ", a[i][j]); //값 출력
}
printf("\n"); //줄 바꾸기
}
바둑판에 올려 놓을 흰 돌의 개수(n)가 첫 줄에 입력된다.
둘째 줄 부터 n+1 번째 줄까지 힌 돌을 놓을 좌표(x, y)가 n줄 입력된다.
n은 10이하의 자연수이고 x, y 좌표는 1 ~ 19 까지이며, 같은 좌표는 입력되지 않는다.
흰 돌이 올려진 바둑판의 상황을 출력한다.
흰 돌이 있는 위치는 1, 없는 곳은 0으로 출력한다.
(19x19) 바둑판에서 n개의 흰 돌이 놓인 위치는 1로 표시, 나머지 검은 돌이 놓인 위치는 0으로 표시한다.
2차원 배열은 [](대괄호)를 두 번 사용하여 선언하며, 첫 번째 대괄호에는 세로 크기, 두 번째 대괄호에는 가로 크기를 지정한다.
int Arr[3][4]={ // 세로 크기 3, 가로 크기 4인 int형 2차원 배열 선언
{11, 22, 33, 44},
{55, 66, 77, 88},
{99, 110, 120, 130}
};
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_s("%d", &n); // n개의 흰 돌 개수 입력
for (i = 1; i <= n; i++) {
scanf_s("%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;
}
좌표를 (y , x)라고 표시한 이유는 배열에선 arr[i][j]일 때, i값이 y좌표 역할을 하고, j값이 x좌표 역할을 하기 때문이다.
2차원 배열 문제를 거의 안풀어봐서 개념 공부를 조금 하고 봤더니 이해가 잘 되었다. 사실 문제 예시에서 정답 코드를 90퍼센트 다 보여주고 있어서 조금만 고치면 됐다ㅋㅋ.. 저래도 되는건가?!