simDev1234
심플하고 차분하게
simDev1234
전체 방문자
오늘
어제
  • 분류 전체보기
    • Computer Science
      • Basic Math
      • Data Structure
      • Algorithm
      • Database
      • OS
    • Language
      • Java
      • Kotlin
      • SQL
    • Framework
      • Spring
      • Orm&Mapper
      • 프로젝트로 스프링 이해하기
      • 스프링 라이브러리
    • Infra
      • Cloud
      • Docker
      • Redis
      • AWS, Azure
      • Device
    • Etc
      • CleanCoding
    • Git,Github

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • scanner #next() #nextLine()
  • 자바프로그램
  • 자바
  • 참조타입
  • 자바메모리구조
  • JVM메모리구조
  • 자바프로그래밍
  • 참조변수
  • 컨트롤러
  • controllerTest
  • 404
  • 스프링
  • null

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
simDev1234

심플하고 차분하게

카테고리 없음

[자바_예제] 2차원 배열_홀수 마방진 만들기

2022. 3. 28. 09:22
package mymain;

import java.util.Arrays;

public class _10_Question_Mabanjin {
	public static void main(String[] args) {
		/*
		[마방진 원리]

		대각선으로 이동하라(plus -1 on row +1 on col)

		만약 바둑판의 행과 열을 모두 벗어날 경우(row<0,col>Max) 자기자신의 아래로 가라
		그렇지 않고 바둑판의 행을 벗어날경우(row<0) row의 가장 아래로 가라
		그렇지 않고 열을 벗어날 경우(col>Max), col의 가장 왼쪽으로 가라 
		그렇지 않고 (대각선 이동은 가능하나) 그 자리에 다른 값이 있을 경우 자기 자신의 아래로 가라 
		
		해당 위치에 다음 숫자를 넣어라
		
		*/
		int[][] testArr = new int[5][5];
		Mabanjin.makeStartPoint(testArr);
		for(int i = 0; i < testArr.length; i++) {
			System.out.println(Arrays.toString(testArr[i]));
		}
		System.out.println();
		Mabanjin.mabanjin(testArr);
		for(int i = 0; i < testArr.length; i++) {
			System.out.println(Arrays.toString(testArr[i]));
		}
	}
	
}

class Mabanjin{
	public static void makeStartPoint(int[][] arr) {
		//배열 값 초기화, 시작 포인트 1로 잡기
		for(int i = 0; i < arr.length; i++) {
			Arrays.fill(arr[i], 0);
		}
		arr[0][arr[0].length/2] = 1;
	}
	public static int[][] mabanjin(int[][] arr) {
		final int ROW_MAX = arr.length;
		final int COL_MAX = arr[0].length;
		
		//배열 안에 넣을 리터럴(1부터 ~ n)
		int n = 1;
		
		//이동 포인트
		int r = 0;
		int c = arr[0].length/2;
		
		for(int i = 0; i < ROW_MAX*COL_MAX-1; i++) {
			r -= 1;
			c += 1;
			if(r < 0 && c > COL_MAX-1) {
				r = r + 2;
				c = c - 1;
			}else if(r < 0) {
				r = r+ROW_MAX;
			}else if(c > COL_MAX-1) {
				c = COL_MAX-c;
			}else if(arr[r][c] > 0) {
				r = r + 2;
				c = c - 1;
			}
			
			arr[r][c] = ++n;
			
		}
		
		return arr;
	}
	
}

>> 실행결과

[0, 0, 1, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]

[17, 24, 1, 8, 15]
[23, 5, 7, 14, 16]
[4, 6, 13, 20, 22]
[10, 12, 19, 21, 3]
[11, 18, 25, 2, 9]
    simDev1234
    simDev1234
    TIL용 블로그. * 저작권 이슈가 있는 부분이 있다면 댓글 부탁드립니다.

    티스토리툴바