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' 는 절대값을 반환하는 함수이다.
간단한듯 간단하지 않은거 같다..