본문 바로가기
[C++] 알고리즘 교육/1~4. 기본기

[알고리즘 3.1.11] 간단한 완전 탐색 - attackrange

by 안산학생 2019. 4. 26.

문제


윤성이는 어렸을 적부터 수없이 몰려오는 적으로부터 기지를 방어하는 디펜스 유형의 게임을 플레이하는 것을 좋아했다. 그래서 간단한 디펜스 게임을 만들어 보려고 한다.

당신은 윤성이를 도와, 디펜스 게임 내에서 플레이어가 설치하는 유닛의 사거리를 나타내는 기능을 구현하면 된다.  

입력


입력 첫째 줄에는 디펜스 게임의 맵 크기 N이 주어딘다. 맵은 N×N 크기의 2차원 형태이다. (N은 6이상 100이하의 짝수)

둘째 줄에는 유닛이 설치될 위치 X, Y와 유닛의 사거리 R이 주어진다. X는 행의 번호, Y는 열의 번호를 의미한다. (X, Y는 1이상 N이하의 자연수, R은 N/2이하의 자연수)

 

출력


예제 출력과 같이 유닛의 사거리를 나타내어 출력한다. (유닛의 사거리가 아무리 길어도 맵을 벗어날 수는 없다.)

 

예제 입력

8

4 5 3

예제 출력

0 0 0 0 3 0 0 0

0 0 0 3 2 3 0 0

0 0 3 2 1 2 3 0

0 3 2 1 x 1 2 3

0 0 3 2 1 2 3 0

0 0 0 3 2 3 0 0

0 0 0 0 3 0 0 0

0 0 0 0 0 0 0 0

 

예제 입력

6

2 3 3

예제 출력

3 2 1 2 3 0

2 1 x 1 2 3

3 2 1 2 3 0

0 3 2 3 0 0

0 0 3 0 0 0

0 0 0 0 0 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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
42
43
44
45
46
47
48
49
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
 
int main() {
 
  int input;
  scanf("%d",&input);
  
  int arr[input][input];
  int i,j;
  
  for(i=0; i<input; i++){
    for(j=0; j<input; j++){
      arr[i][j] = 0;
    }
  }
  
  int x,y,z;
  scanf("%d %d %d",&x,&y,&z);
  int dis;
  x -= 1;
  y -= 1;
  
  for(i=0; i<input; i++){
    for(j=0; j<input; j++){
     dis = abs(i-x) + abs(j-y);
     if(dis<=z){
       arr[i][j] = dis;
     }
    }
  }
  
  
  
  
  for(i=0; i<input; i++){
    for(j=0; j<input; j++){
      if(i==&& j==y){
        printf("x ");
      }else{
        printf("%d ",arr[i][j]);
      }
    }
    printf("\n");
  }
  
  return 0;
}
 

댓글