728x90
[방법 1]
public static void main(String[] args) {
int size = 4;
for (int i = 0; i < size * 2 - 1; i++) {
if (i < size) {
for (int k = 0; k < i; k++) {
System.out.print(" ");
}
for (int j = 7; j > i * 2; j--) {
System.out.print("*");
}
System.out.println();
}
else {
for (int j = 0; j < 2 - (i - 4); j++) {
System.out.print(" ");
}
for (int k = 0; k < 2 * (i - 3) + 1; k++) {
System.out.print("*");
}
System.out.println();
}
}
}
위 아래가 대칭인 모래 시계 모양 때문에, 우선 시작되는 역삼각형의 단을 활용해서 아래를 반복 시켰다.
* * *
* *
*
* * (여기가 반복)
* * * (여기가 반복)
그래서 첫번째 반복문 즉 단을 만들어 주는 반복문에서 size*2-1 만큼 반복한다.
그리고 i 즉 단 수가 size 보다 작을 경우 위의 if 문이 실행되고, 큰 경우 아래 else문이 실행된다.
하지만 아쉬운 점이 많은 코드라, v2에서는
단 수 전체 길이를 size라는 변수로 잡고, size를 Scanner 로 입력받고, 반복되는 코드를 조금 더 줄였다.
[방법2]
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int size = sc.nextInt();
int mid = size/2;
System.out.println("size: " + size);
System.out.println();
for (int i = 0, j = 0; i < size; i++) {
for (int k = 0; k < size - j; k++) {
if (k<j){
System.out.print(" ");
} else {
System.out.print("*");
}
}
if (i<mid){
j++;
} else {
j--;
}
System.out.println();
}
}
if (i<mid){
j++;
} else {
j--;
}
단 수가 중간보다 작을 때까지는 j++ 해주고
그 외에는 (여기서는 i가 4와 같거나 i가 4보다 커지면) j-- 해준다.
이 j를 활용해서
*이 7 일때 " " 0,
*이 5 일때 " " 1,
*이 3 일때 " " 2,
*이 1 일때 " "3, 를 반복문으로 만들었다.
if (k<j){
System.out.print(" ");
} else {
System.out.print("*");
}
}
[방법3]
위 문단을 아래와 같이 삼항연산자로 바꿔주면 코드가 더 단축된다.
System.out.print((k<j) ? " " : "*");
728x90
'☕️자바 𝗝𝗔𝗩𝗔' 카테고리의 다른 글
[java] 자바 메모리 구조(static, stack, heap) (0) | 2022.11.18 |
---|---|
[java] 피라미드 별찍기 예제 (0) | 2022.11.09 |
String 과 String Pool (0) | 2022.11.04 |
[java] 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기 (0) | 2022.11.02 |
[Java] 가변인자(varargs, 쩜쩜쩜) 사용법 (매개변수 동적 사용) (0) | 2022.10.25 |
댓글