배열 크기, row좌표, column좌표
* ex) 3 1 1
public class FillCell2_2 {
static int N;//배열 크기
static int[][] map; //배열 선언
static boolean inRange(int nx, int ny) {
if(nx>=0 && nx<N && ny>=0 && ny<N) { //x , y 범위 값 설정
return true;
}else {
return false;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N=sc.nextInt(); //N 입력받고
map=new int[N][N]; //map 배열 생성
int x=sc.nextInt(); //기준점이 되는 x좌표
int y=sc.nextInt(); //기준점이 되는 y좌표
int dx[] = { -1, 1, 0, 0 }; //x좌표
int dy[] = { 0, 0, 1, -1 }; //y좌표
for(int i=0; i<dx.length; i++) {
int nx= x+dx[i];
int ny= y+dy[i];
if(inRange(nx,ny)) { //범위 설정
map[nx][ny]=1; // 범위가 true 면 1을 대입 아니면 안한다.
}
}
/// 처리 코드 작성
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
System.out.print(map[i][j]+" ");
}
System.out.println();
}
}
}
8방향 확인 하는 방법
#8방향 확인 하는 방법
static boolean inRange(int nx, int ny) {
if(nx>=0 && nx<N && ny>=0 && ny<N) { //x , y 범위 값 설정
return true;
}else {
return false;
}
}
int dx[] = { -1, 0, 1, 1, 1, 0, -1, -1 };
int dy[] = { -1, -1, -1, 0, 1, 1, 1, 0 };
for(int i=0; i<dx.length; i++) {
int nx= x+dx[i];
int ny= y+dy[i];
if(inRange(nx,ny)) { //범위 설정
map[nx][ny]=1; // 범위가 true 면 1을 대입 아니면 안한다.
}
}
#입력좌표에서 지정한 칸수만큼 상하좌우로 1 채우기
#입력좌표에서 지정한 칸수만큼 상하좌우로 1 채우기
입력 : 배열의 크기, row좌표, column좌표, 칸수
for(int i=1; i<=num; i++) {
for(int j=0; j<dx.length; j++) {
int nx=x+dx[j]*i;
int ny=y+dy[j]*i;
if(nx>=0 && nx<N && ny>=0 && ny<N) {
map[nx][ny]=1;
}
}
}
칸수 만큼 반복을 처리하는데, * 연산자를 통해서 칸수를 1,2,3,4 씩 늘려갈 수 있도록 설정한다.
여기서 좀 더 생각해보면 지정칸수 만큼 움직이는 문제들에 응용이 가능하다.
한칸, 두칸, 세칸 뛰는 경우 따로 loop를 돌리지 않고도 * 연산자를 통해서 구분이 가능하다.