🔗 https://www.acmicpc.net/problem/2446
문제
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
입력
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
출력
첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
예제
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");
}
3) 알게된 것 / 느낀점
- 맨 첫줄 공백을 출력 없이 넘기는 방법을 생각하다가
break;
를 사용했다.
일단 for문에는 진입하되 이후 출력 전에 break를 걸어 패스하는 방식으로. - 위 코드를 보면
break;
없이 아예 첫줄은 조건문에 부합되지 않도록 설정했다.
처음엔 이렇게 해볼까 싶었지만 조건문이false
면 뒤의j++
도 실행되지 않을 것이기 때문에(if문처럼 아예 for문 진입을 안 할 것이라고 생각) 무한반복 될 것이라고 생각했다. - for문에서의 조건식은 이 for문을 실행할 것이냐를 판별하는게 아니라 변수 초기화된 시점에서 이미 for문은 시작된 것이고