1525번 크레이지 아케이드 문제를 풀어보았다.
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;
}