https://codeup.kr/problem.php?id=1098
#include <stdio.h>
int main(void)
{
// input process
int grid[100][100] = {}; // [세로]x[가로] 빈 배열 공간 생성 = 격자판 역할
int h, w, n, l, d, x, y;
scanf_s("%d %d", &h, &w); // 배열 공간의 세로, 가로 길이 입력
scanf_s("%d", &n); // 막대의 개수 입력
for (int i = 1; i <= n; i++) // 입력한 막대의 개수만큼 반복
{
scanf_s("%d %d %d %d", &l, &d, &x, &y); // n번째 막대의 길이, 방향, 좌표(x,y) 설정
if (d == 0) // 방향이 0 이면 = 가로로 배치
{
for (int j = 0; j < l; j++) // 입력한 막대의 길이만큼
grid[x][y + j] = 1; // y + j 공간에 1 표시
}
else if (d == 1) // 방향이 1 이면 = 세로로 배치
{
for (int j = 0; j < l; j++) // 입력한 막대의 길이만큼
grid[x + j][y] = 1; // x + j 공간에 1 표시
}
}
// output process
for (int i = 1; i <= h; i++)
{
for (int j = 1; j <= w; j++)
{
printf("%d ", grid[i][j]);
}
printf("\n"); // 하나의 x 축이 끝나면 줄바꿈
}
return 0;
}
본 코드의 좌표값은 아래 [그림 1, 2] 를 참조하시면 더 이해하기 쉽습니다.
if (d == 0) // 방향이 0 이면 = 가로로 배치
{
for (int j = 0; j < l; j++) // 입력한 막대의 길이만큼
grid[x][y + j] = 1; // y + j 공간에 1 표시
}
else if (d == 1) // 방향이 1 이면 = 세로로 배치
{
for (int j = 0; j < l; j++) // 입력한 막대의 길이만큼
grid[x + j][y] = 1; // x + j 공간에 1 표시
}
소스코드의 구성에서 d(방향) 이 0(가로) 일 때 x 축이 아닌 y 축의 늘어나는 공간마다 1 을 저장하는 이유가 바로 [그림 2] 의 설명입니다.
또한 if문 안의 반복문 초기값인 int j 를 0 으로 시작해야 온전한 시작점에서 반복을 진행 수 있습니다.
int j 가 1 이라면 grid [x + 1][y] 로 시작하기 때문에 입력한 좌표값보다 한 칸 더 앞서간 출력값이 도출되버림.
'Language > CodeUp : C' 카테고리의 다른 글
[CodeUp] 1097 : [기초-2차원배열] 바둑알 십자 뒤집기 (0) | 2021.06.02 |
---|---|
[CodeUp] 1096 : [기초-2차원배열] 바둑판에 흰 돌 놓기 (0) | 2021.06.01 |
[CodeUp] 1095 : [기초-1차원배열] 이상한 출석 번호 부르기3 (0) | 2021.06.01 |
[CodeUp] 1094 : [기초-1차원배열] 이상한 출석 번호 부르기2 (0) | 2021.06.01 |
[CodeUp] 1093 : [기초-1차원배열] 이상한 출석 번호 부르기1 (0) | 2021.06.01 |