1525 크레이지 아케이드

 

http://codeup.kr/problem.php?id=1525

 

크레이지 아케이드

-2 0 0 -1 0 -1 -1 -2 -2 -1 -2 -2 -1 0 -1 -1 -2 -2 -2 0 -2 -1 -2 -1 -2 -2 -2 0 0 0 -2 -1 -1 -2 -2 0 0 0 0 0 -1 0 0 -2 0 0 0 0 0 0 0 0 0 -2 0 0 0 0 0 0 0 0 0 -2 0 0 0 0 0 0 -2 -2 -2 -2 -2 -2 -2 -2 -2 0 0 0 0 -2 0 -2 -2 -2 0 0 0 0 0 -2 0 0 -2 0 0 2 Character

codeup.kr

 

다들 크레이지 아케이드라는 게임을 알 것이다.

이 문제는 물풍선이 터지고 난 뒤에 살아있는 플레이어를 구분하는 문제이다.

장애물은 -1, 빈 공간은 0, 그리고 0보다 큰 수는 물풍선으로 써져있는 숫자만큼 터진다.

그리고 벽이나 장애물에 막히면 더 이상 터지지 않는다.

플레이어의 위치가 주어지고 물풍선이 터지고 난 뒤의 맵의 모양과 살아남은 플레이어와 죽은 플레이어를 출력한다.

단순하게 연산자만 사용하여 풀었다.

터지는 방향을 정해주는 상하좌우 C함수와 벽이거나 장애물이거나 주어진 길이만큼 다 터지면 다른방향으로 바꾸는 조건문을 사용하여 풀었다.

 

#include <stdio.h>

int U,R;

int C(int t) {
    if(t==1) {U=0;R=-1;}
    else if(t==2) {U=0;R=1;}
    else if(t==3) {U=-1;R=0;}
    else {U=1;R=0;}
}

int main()
{
    int n,i,j,f,k,arr[11][11],g,h,c[9]={0},l,x,y;
    for(i=1; i<11; i++) for(j=1; j<11; j++) scanf("%d", &arr[i][j]);
    for(i=1; i<11; i++) {
        for(j=1; j<11; j++) {
            if(arr[i][j]>0) {
                for(k=1; k<5; k++) {
                    C(k);
                    x=i;
                    y=j;
                    l=arr[x][y];
                    f=l;
                    while(x && y && f!=-1 && x<11 && y<11 && l) {
                        x+=U;
                        y+=R;
                        f=arr[x][y];
                        if(!arr[x][y]) arr[x][y]=-2;
                        l--;
                    }
                }
                arr[i][j]=-2;
            }
        }
    }
    scanf("%d", &n);
    for(i=1; i<=n; i++) {
        scanf("%d %d", &g, &h);
        if(!arr[g][h]) {arr[g][h]=i;c[i]=i;}
    }
    for(i=1; i<11; i++) {
        for(j=1; j<11; j++) printf("%d ", arr[i][j]);
        puts("");
    }
    puts("Character Information");
    for(i=1; i<=n; i++) {
        printf("player %d ",i);
        if(c[i]) puts("survive");
        else puts("dead");
    }
    return 0;
}

+ Recent posts