알고리즘 공부/CodeUp 문제풀이

코드업 기초 2차원배열 1098:설탕과자 뽑기(C)

티들 2023. 9. 16. 11:27

문제설명

부모님과 함께 유원지에 놀러간 영일이는
설탕과자(설탕을 녹여 물고기 등의 모양을 만든 것) 뽑기를 보게 되었다.

길이가 다른 몇 개의 막대를 바둑판과 같은 격자판에 놓는데,

막대에 있는 설탕과자 이름 아래에 있는 번호를 뽑으면 설탕과자를 가져가는 게임이었다.
(잉어, 붕어, 용 등 여러 가지가 적혀있다.)


격자판의 세로(h), 가로(w), 막대의 개수(n), 각 막대의 길이(l),
막대를 놓는 방향(d:가로는 0, 세로는 1)과
막대를 놓는 막대의 가장 왼쪽 또는 위쪽의 위치(x, y)가 주어질 때,

격자판을 채운 막대의 모양을 출력하는 프로그램을 만들어보자.
 

입력 예시

5 5
3
2 0 1 1
3 1 2 3
4 1 2 5


출력 예시

1 1 0 0 0

0 0 1 0 1

0 0 1 0 1

0 0 1 0 1

0 0 0 0 1

 

내 코드

#include <stdio.h>

int main()
{
    int h, w, n, i, d, x, y, z=0;	// 변수 선언
    scanf("%d %d", &h, &w);
    int a[100][100] = {};	// 배열 생성
    scanf("%d", &n);
    for(int e=0;e<n;e++)
    {
        scanf("%d %d %d %d", &i, &d, &x, &y);	// 막대 입력 받음
        for(int b=0;b<i;b++)
        {
            if(d==1) a[x+z][y] = 1;	// 방향에 따라서 막대가 생김 
            if(d==0) a[x][y+z] = 1;
            z++;
        }
        z=0;
    }
    for(int e=1;e<=h;e++)
    {
        for(int b=1;b<=w;b++)
            printf("%d ", a[e][b]);	//출력
        printf("\n");
    }
    return 0;
}

모범 답안

#include <stdio.h>

int h, w, n;
int l, d, x, y;
int i, j;
int map[2000][2000];

main()
{
	scanf("%d%d%d", &h, &w, &n);
	for(i=0; i < n; i++)
	{
		scanf("%d%d%d%d", &l, &d, &x, &y);
		if(d == 0)
		{
			for(j=y; j<y+l; j++)
				map[x][j] = 1;
		}
		else
		{
			for(j=x; j <x+l; j++)
				map[j][y] = 1;
		}		
	}
	
	for(i=1; i <= h; i++, puts(""))
		for(j=1; j <= w; j++)
		{
			printf("%d ", map[i][j]);
		}
}