완전 탐색 알고리즘 문제입니다.
핵심
처음에 이 문제를 풀려고 한다면, 여러 가지 방법을 떠올릴 것이다. 개인적으로 쉬운 방법은 배열의 거리를 구하는 것이다.
정답 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int X = sc.nextInt();
int Y = sc.nextInt();
int R = sc.nextInt();
for (int i =1; i<=N; i++){
for (int j=1;j<=N;j++){
int range =(Math.abs(X-i)+Math.abs(Y-j));
if (range>R){
System.out.print(0+" ");
}
else if(X==i&&Y==j) System.out.print("x"+" ");
else {
System.out.print(range+" ");
}
}
System.out.println();
}
}
}
해설
N크기의 맵이 주어준다.
즉 N*N사이즈이다. x, y좌표를 받고 사정거리는 r이다.
배열을 탐색하면서 해당 좌표와 지정된 좌표의 거리가 r 이상이면, 0을 출력한다.
중요한 점은 Math.abs를 사용하는 것인데, 이는 절댓값으로 만들어준다.
예를 들면 (5,4)와 (4,6)이 있다고 한다면, (5-4)+(4-6) = -1이 나온다.
실제 거리는 x축으로 1, y축으로 2만큼 떨어졌더라도, -1이라는 값이 나오는 것을 방지하기 위함이다.
|(5-4)|+|(4-6)|=3가 나오게 된다.
그리고 해당 좌표인 x, y에는 x를 출력한다.
개선점이나 오류가 있다면, 댓글 부탁드립니다.
'PS > 알고리즘 문제풀이' 카테고리의 다른 글
*완전 탐색* seat (0) | 2022.09.24 |
---|---|
*완전 탐색* baseballgame (0) | 2022.09.21 |
*완전탐색* colorpaper (0) | 2022.09.14 |
*완전 탐색* rook(java,알고리즘) (2) | 2022.09.11 |
[백준]1213번 팰린드롬 만들기(java) (0) | 2022.09.10 |