자바실전_Day_23_02(숫자찍기(별찍기))
-----------------------------------------------------------------------------------
1번째 예제
●결과값
//하나하나 요밀조밀 뜯어서 생각하기.
//위/아래 분할은 했다.
//아래 로직을 정확하게 계산하지 못했다.
//
//#객체 생성
Scanner scan = new Scanner(System.in);
System.out.println("숫자 입력 : ");
int input = scan.nextInt();
//#변수 선언및 초기화
int[][] number = new int[input][input];
int count = 0; // 결과값 증감
int tmp = input-1; //값을 입력하는 것에 따라 '띄어쓰기' 할지 말지 여부
double dvide= (input/2)+1; //위 / 아래 인지 분할하는 기준이되는 값
//#계산 및 출력
for(int i = 0 ; i < number.length; i++) {
for(int j = 0 ; j < input ; j++) {
//위에
if(i < dvide) {
if(i > j) {
System.out.print("\t");
}else {
count++;
System.out.print(+count+"\t");
}
//아래
}else {
if(tmp - i > j) { //규칙을 찾았고 그것을 공통으로 만들어야한다.
System.out.print("\t");
}else {
count++;
System.out.print(+count+"\t");
}
}
}//end of for
//한 줄이 끝나고, 그 다음에 숫자를 몆개 찍을지 계산하는 로직
if(i >= dvide-1 ) { // 아래값 : 아래의 값으로 전환되는 것을 나눠주는 로직
input +=1; // 숫자를 갯수의 여부
}else { // 윗값 :
if(i < dvide) { //위에서 내려올수록 값일수록, 갯수가 덜찍힌다.
input -=1;
}
}
System.out.println();
System.out.println();
}//end of for
-----------------------------------------------------------------------------------
1번째 예제 정석(Teacher 작품)
●결과값
int[][] arr = new int[7][7];
int value =1;
int middle = 0;
//값넣기
for(int i = 0 ; i < arr.length; i++) {
middle = arr.length/2;
if(i <= middle) {
for(int j=i; j<arr[i].length-i; j++) {
arr[i][j] = value;
value++;
}
}else {
for(int j = arr[i].length-(i+1); j<=i; j++) {
arr[i][j] = value;
value++;
}
}
}
//출력
for(int i = 0 ; i <arr.length; i++) {
for(int j = 0 ; j < arr[i].length; j++) {
if(arr[i][j] ==0) {
System.out.printf("%2s \t","");
}else {
System.out.print(arr[i][j] + "\t");
}
}
System.out.println();
System.out.println("-----------------------------------");
System.out.println();
}