🔗 https://www.acmicpc.net/problem/2446

문제

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

입력

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

출력

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

예제

image

1) 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package baekjoon;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();

        for(int i=0; i<n; i++) {
            for(int j=0; j<=i; j++) {
                if(j==i) break;
                System.out.print(" ");
            }
            for(int k=2*n; k>2*i+1; k--)  System.out.print("*");
            System.out.println();
        }

        for(int i=0; i<n-1; i++) {
            for(int j=n-2; j>i; j--) System.out.print(" ");
            for(int k=0; k<i*2+3; k++) System.out.print("*");
            System.out.println();
        }
    }
}

2) 다른 사람 코드

1
2
3
4
5
6
// 처음 공백 출력하는 부분
for(int i = 0; i < n; i++) {
	for(int j = 0; j < i; j++) printf(" ");
	for(int j = 0; j < (n - i) * 2 - 1; j++) printf("*");
	printf("\n");
}

🔗 코드 출처 : index

3) 알게된 것 / 느낀점

  • 맨 첫줄 공백을 출력 없이 넘기는 방법을 생각하다가 break;를 사용했다.
    일단 for문에는 진입하되 이후 출력 전에 break를 걸어 패스하는 방식으로.
  • 위 코드를 보면 break; 없이 아예 첫줄은 조건문에 부합되지 않도록 설정했다.
    처음엔 이렇게 해볼까 싶었지만 조건문이 false면 뒤의 j++ 도 실행되지 않을 것이기 때문에(if문처럼 아예 for문 진입을 안 할 것이라고 생각) 무한반복 될 것이라고 생각했다.
  • for문에서의 조건식은 이 for문을 실행할 것이냐를 판별하는게 아니라 변수 초기화된 시점에서 이미 for문은 시작된 것이고