IT•개발 끄적/Java

[java] 다이아몬드 별찍기

소다맛사탕 2021. 4. 8. 19:19
반응형

안녕하세요. 소다맛사탕입니다.

맨 처음 알고리즘 배울때 만들었던 다이아몬드..

 

추억이 되어버린 다이아몬드 모양 별찍기 코딩을 다시 해봤습니다.

 

System.out.print("다이아몬드의 줄 수를 입력 : ");
Scanner sc = new Scanner(System.in);
int line = sc.nextInt();
sc.nextLine();

// 다이아몬드 시작 맨처음 별
int star = 1;
int inLine = line;	// 입력한 다이아몬드 줄을 설정함.

for(int i = 0; i < line; i++) {
	for(int j = 0 ; j < inLine; j++) {
    	// 입력한 줄 수만큼 공백을 처리.
		System.out.print(" ");
	}
    
    // 줄 수 만큼 별의 갯수를 표시.
	for(int j = 0; j < star; j++){
    	System.out.print("*");
    }
	// 최상위 for문의 줄 수만큼 공백를 하나씩 지움.
	inLine--;
	star += 2; // 홀수개씩 증가.
	System.out.println(" "); // 줄바꿈
}

// 다이아몬드 밑부분
for(int i = 0; i < line - 1; i++) {
	for(int j = inLine + 2; j > 0; j--) {	// 줄 수가 줄어듬.
    	// 입력한 줄 수만큼 공백처리
		System.out.print(" ");
	}
    // 감소되는 줄 수만큼 별의 갯수를 표시.
	for(int j = star - 4; j > 0; j--) {
		System.out.print("*");
	}
    // 반대로 감소되는 줄 수만큼 공백을 하나씩 생성.
	inLine++;
	star -= 2;	// 홀수개씩 감소.
	System.out.println(" ");
}

위의 방법은 윗부분 다이아를 생성후에 중간을 기점으로 다이아 밑부분 다이아를 생성하는 방식입니다.

 

사실 코딩한 소스도 파악하기 힘들고, 함수를 씁시다.

 

 

그래서.. 

 

System.out.print("다이아몬드의 줄 수를 입력 : ");
Scanner sc = new Scanner(System.in);
int line = sc.nextInt();
sc.nextLine();

int height = line;	// 다이아몬드 높이
if(height%2 == 0) {	// 다이아몬드 높이 짝수면 안되므로.
	height -= 1;
}
int star = (int)(height / 2);	// 소수점 제거.
for(int i = 0; i<height; i++){
	for(int j = 0; j<height; j++){
    	// 함수를 이용해 구현
		if(star - Math.abs(star - i) >= Math.abs(star - j)){
			System.out.print("*");
		} else {
			System.out.print(" ");
		}
	}
	System.out.println();
}

Math.abs() 함수를 이용하여 더 깔끔하게 다이아를 생성할 수 있다.

'abs' 는 절대값을 반환하는 함수이다.

 

 

간단한듯 간단하지 않은거 같다..