알고리즘 공부/CodeUp 문제풀이
코드업 기초 2차원배열 1098:설탕과자 뽑기(C)
티들
2023. 9. 16. 11:27
문제설명
부모님과 함께 유원지에 놀러간 영일이는
설탕과자(설탕을 녹여 물고기 등의 모양을 만든 것) 뽑기를 보게 되었다.
길이가 다른 몇 개의 막대를 바둑판과 같은 격자판에 놓는데,
막대에 있는 설탕과자 이름 아래에 있는 번호를 뽑으면 설탕과자를 가져가는 게임이었다.
(잉어, 붕어, 용 등 여러 가지가 적혀있다.)

격자판의 세로(h), 가로(w), 막대의 개수(n), 각 막대의 길이(l),
막대를 놓는 방향(d:가로는 0, 세로는 1)과
막대를 놓는 막대의 가장 왼쪽 또는 위쪽의 위치(x, y)가 주어질 때,
격자판을 채운 막대의 모양을 출력하는 프로그램을 만들어보자.
설탕과자(설탕을 녹여 물고기 등의 모양을 만든 것) 뽑기를 보게 되었다.
길이가 다른 몇 개의 막대를 바둑판과 같은 격자판에 놓는데,
막대에 있는 설탕과자 이름 아래에 있는 번호를 뽑으면 설탕과자를 가져가는 게임이었다.
(잉어, 붕어, 용 등 여러 가지가 적혀있다.)

격자판의 세로(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]);
}
}