profile image

L o a d i n g . . .

문제 : 격자판의 세로(h), 가로(w), 막대의 개수(n), 각 막대의 길이(l), 막대를 놓는 방향(d:가로는 0, 세로는 1)과
막대를 놓는 막대의 가장 왼쪽 또는 위쪽의 위치(x, y)가 주어질 때, 격자판을 채운 막대의 모양을 출력하는 프로그램을 만들어보자.

 

 

정답 : 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int h, w;
	int n;
	int l, d, x, y;
	int arr[100][100]={};

	scanf("%d %d",&h,&w);

	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		scanf("%d %d %d %d",&l,&d,&x,&y);

		if (d == 0)
		{
			for (int j = y - 1;j < y + l-1;j++)
				arr[x - 1][j] = 1;
		}

		else if (d == 1)
		{
			for (int j = x - 1;j < x + l-1;j++)
				arr[j][y-1] = 1;
		}

	}

	for (int i = 0;i < h;i++) {
		for (int j = 0;j < w;j++) {
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}

	return 0;

}

먼저 세로(h), 가로(w)의 최대 크기가 100이기에, 배열의 크기가 100*100인 배열을 선언해 0으로 초기화한다.

그리고 막대의 개수(n)을 입력받고 n만큼 for 문을 돌리는데, 이때 각 막대의 길이(l), 방향(d), 좌표(x,y)도 입력받는다.

모두 입력 받은 다음, 막대의 방향(d)가 0일 때와 1일 때로 나누어 각각 for문을 돌린다.

만약 d==0일 때는 가로 방향으로 막대의 길이(l)만큼 1로 할당해주고, d==1일 때는 세로 방향으로 막대의 길이(l)만큼 1로 할당해준다.

그리고 마지막에 for 문을 중첩해 h*w 크기 만큼의 격자판를 출력해준다.

복사했습니다!