Codeup

Codeup]C-기초100제_1096~1099

Pican 2019. 5. 7. 10:38

1096][기초-종합+배열] 바둑판에 흰돌 놓기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
 
int n, i, j, a, b;
int map[20][20];
 
main()
{
    scanf("%d"&n);
    for(i=0; i < n; i++)
    {
        scanf("%d%d"&a, &b);
        map[a][b] = 1;
    }
     
    for(i=1; i <= 19; i++)
    {
        for(j=1; j <= 19; j++)
        {
            printf("%d ", map[i][j]);
        }
        printf("\n");
    }
}
cs

먼저 바둑판의 놓을 흰 돌의 개수가 주어집니다.

그리고 둘 쨰 줄 부터, n + 1줄까지 놓을 좌표가 주어집니다.

n<=10, x,y는 1~19이고 좌표는 중복되지 않습니다.

 

2차원 배열을 이용해 입력받은 좌표에 1을 표시하여,

출력할때 입력받지 않은 좌표는 0, 아까 입력받은 좌표는 1을 표시하여주면 됩니다.

1097][기초-종합+배열] 바둑알 십자 뒤집기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include<stdio.h>
 
int main()
{
    int a[20][20], i, x, y, j, n;
 
    for(i=1 ; i<=19 ; i++)
    {
        for(j=1 ; j<=19 ; j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
 
    scanf("%d",&n);
 
    for(i=1 ; i<=n ; i++)
    {
        scanf("%d %d",&x,&y);
        for(j=1 ; j<=19 ; j++)
        {
            if(a[x][j]==0) a[x][j]=1;
            else a[x][j]=0;
        }
 
        for(j=1 ; j<=19 ; j++)
        {
            if(a[j][y]==0) a[j][y]=1;
            else a[j][y]=0;
        }
    }
 
    for(i=1 ; i<=19 ; i++)
    {
        for(j=1 ; j<=19 ; j++)
        {
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
}
cs

먼저 바둑 판을 입력받습니다. (바둑알의 유무를 0, 1로)

그 후 십자 뒤집기의 횟수와 그 좌표를 각각 입력받습니다.

 

일단 처음 바둑 판을 입력 받을 때, 바둑 판은 19X19로 고정되어 있으므로,

2차원 배열에 바둑 판을 입력받습니다.

그 후, 십자 뒤집기 횟수만큼 반복문을 돌린 후, 그 좌표에 맞추어

십자 뒤집기를 실행하고, 이전 문제와 동일하게 2차원 배열을 출력해주면 됩니다.

1098][기초-종합+배열] 설탕과자 뽑기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<stdio.h>
 
int main()
{
    int h, w, n, l, d, x, y, i, j;
    int a[101][101]={0};
    scanf("%d %d",&h,&w);
    scanf("%d",&n);
 
    for(i=1 ; i<=n ; i++)
    {
        scanf("%d %d %d %d",&l,&d,&x,&y);
        if(l==1)
            if(a[x][y]==0) a[x][y]=1;
        if(l!=1)
        {
            if(d==0)
                for(j=1 ; j<=l ; j++)
                    a[x][y+j-1]=1;
            else if(d==1)
                for(j=1 ; j<=l ; j++)
                    a[x+j-1][y]=1;
        }
    }
 
    for(i=1 ; i<=h ; i++)
    {
        for(j=1 ; j<=w ; j++)
        {
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
}
cs

첫번째 줄에 격자판의 크기가 입력, 두번째는 놓을 수 있는 막대의 개수,

세번째 줄부터 각 막대의 길이, 방향, 좌표가 입력됩니다.

 

바둑판 문제처럼, 2차원 배열을 입력하여 막대를 배열 합니다. 

여기서 전에 막대를 배치한 상황이 오면 그 부분은 1로 바꾸어 줍니다.

 

모두 마친 후, 2차원 배열을 출력합니다.

1099][기초-종합+배열] 성실한 개미

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<stdio.h>
int main()
{
    int map[11][11],x=2,y=2,i,j;
    for(i=1;i<=10;i++)
        for(j=1;j<=10;j++)
            scanf("%d",&map[i][j]);
    while(map[x][y]!=2)
    {
        map[x][y]=9;
        if(map[x][y+1]!=1) y+=1;
        else if(map[x+1][y]!=1) x+=1;
        else break;
    }
    map[x][y]=9;
    for(i=1;i<=10;i++)
    {
        for(j=1;j<=10;j++)
            printf("%d ",map[i][j]);
        printf("\n");
    }
    return 0;
}
cs

처음에 10x10의 미로가 0, 1(장애물), 2(먹이)로 입력됩니다.

여기서 가장자리는 모두 장애물(벽)이고, 개미는 2,2부터 움직입니다.

 

처음에는 반복문을 통해 배열에 미로를 입력받은 후, 

반복문을 통해 먹이가 아닐 동안은 x나 y로 이동합니다.

 

이동한 경로는 9로 표시하여 준 후, 2차원 배열을 출력하여줍니다.

 

수고하셨습니다. Codeup 1096~1099번까지 기초 100문제를 모두 푸셨습니다!