2021. 2. 12. 23:31ㆍ코딩 테스트/필수 문제
1. 문제
윤성이는 어렸을 적부터 수없이 몰려오는 적으로부터 기지를 방어하는 디펜스 유형의 게임을 플레이하는 것을 좋아했다. 그래서 간단한 디펜스 게임을 만들어 보려고 한다.
당신은 윤성이를 도와, 디펜스 게임 내에서 플레이어가 설치하는 유닛의 사거리를 나타내는 기능을 구현하면 된다.
입력
입력 첫째 줄에는 디펜스 게임의 맵 크기 N이 주어딘다. 맵은 N×N 크기의 2차원 형태이다. (N은 6이상 100이하의 짝수)
둘째 줄에는 유닛이 설치될 위치 X, Y와 유닛의 사거리 R이 주어진다. X는 행의 번호, Y는 열의 번호를 의미한다. (X, Y는 1이상 N이하의 자연수, R은 N/2이하의 자연수)
출력
예제 출력과 같이 유닛의 사거리를 나타내어 출력한다. (유닛의 사거리가 아무리 길어도 맵을 벗어날 수는 없다.)
예제 입력
case 1)
8
4 5 3
case 2)
6
2 3 3
예제 출력
case 1)
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
case 2)
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
2. 풀이
이 문제의 풀이는 비교적 간단하다. 배열의 (0,0) 부터 차례대로 돌면서 유닛과의 떨어진 거리를 계산하고, 그 계산된 값이 문제에 주어진 사거리보다 작거나 같을 경우 해당 배열에 계산된 거리를 넣어주면 된다. 단, 유닛의 위치는 'x'로 출력해야한다는 점을 주의해야한다.
import java.io.*;
import java.util.StringTokenizer;
public class Main {
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int y = Integer.parseInt(st.nextToken()) - 1; // 행
int x = Integer.parseInt(st.nextToken()) - 1; // 열
int r = Integer.parseInt(st.nextToken()); // 사거리
int[][] arr = new int[n][n];
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
int distance = Math.abs(y-i) + Math.abs(x-j);
if(distance == 0) arr[i][j] = -1;
else if(distance <= r) arr[i][j] = distance;
}
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if(arr[i][j] == -1) bw.write("x ");
else bw.write(arr[i][j] + " ");
}
bw.newLine();
}
br.close();
bw.flush();
bw.close();
}
}
'코딩 테스트 > 필수 문제' 카테고리의 다른 글
[필수 문제] colorpaper (0) | 2021.02.13 |
---|---|
[필수 문제] class president (0) | 2021.02.12 |
[필수 문제] rook (0) | 2021.02.12 |
[필수 문제] maxofarr (0) | 2021.02.12 |