백준 2446번 java 별 찍기 - 9 for()문이 여섯개!!
별 찍는 프로그램이다.
입력값이 5면 모래시계 모양처럼 5줄을 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
26
27
28
29
30
|
import java.util.Scanner;
//baekjoon_2446
/*
*/
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int cnt=0;
//윗 행
for(int i=0; i<n; i++) {
for(int j=0; j<i; j++)
System.out.print(" ");
for(int j=i*2; j<(2*n)-1; j++)
System.out.print("*");
System.out.println();
}
for(int i=0; i<n-1; i++) {
for(int j=i+1; j<n-1; j++)
System.out.print(" ");
for(int j=1; j<4+cnt; j++)
System.out.print("*");
System.out.println();
cnt += 2;
}
}
}
|
cs |
for문이 참 많이 들어간다.
별도 찍어야 하고 공백도 출력해야 해서 좀 귀찮긴 하다.
line 14 : 14행부터 20행 까지 윗줄 그러니까 1까지 줄어드는 별을 찍는 for문이다.
입력값에 따라 출력하는데 5를 입력하면 9-7-5-3-1 이렇게 찍어야 한다. 때문에 14행 for문은 n번 반복하게 돌린다.
line15 : 공백을 출력하는 for문이다. 처음에는 출력을 안하고 그 다음에는 한 칸 그 후에는 두 칸 이렇게 출력을
해야한다.
공백은 별을 하나 찍을때까지 증가하므로 j는 0부터 i까지 공백을 출력한다. i가 0일때는 출력X i가 1일 때는 1회 출력.
line 17 : 규칙을 찾아서 설정해줘야 한다. 조금 복잡한데 모래시계 윗 모양을 출력할 때는 별이 줄어들면서 출력
해야한다.
별이 두개씩 줄어들므로 초깃값을 i*2로 정해 찍는 횟수를 줄어들게 한다.
맨 윗줄은 입력값이 5면 찍는 별은 9개 이므로 2*n-1이 최대값이다. 이 for문이 끝나면 줄넘김을 한다.
line 21 : 위에 for문에서 별 하나까지 찍었으므로 그 다음 부터 출력한다. n-1번 반복한다.
line 22 : 공백 출력이다. 마찬가지로 처음부터 한 칸씩 띄고 n-1번까지 반복한다.
line 24 : 이 for문이 맨 처음 돌 때는 3부터 출력하고 그 다음줄에는 2개를 추가하면 된다.
1부터 4+cnt(0)으로 3개 별을 찍고 for문이 끝나면 줄넘김을 하고 cnt에 2를 더해서 범위를 늘려준다.
이러면 끝!!
이게 코딩하는것보다 설명을 작성하는게 더 어려운거 같다.
'프로그래밍 > 백준 알고리즘 코드' 카테고리의 다른 글
백준 10818번 java 최소, 최대 (1차원 배열) (0) | 2020.09.03 |
---|---|
백준 10996번 java 별 찍기 - 21 for문 (0) | 2020.09.02 |
백준 2523번 java 별 찍기 - 13 다중for문 (0) | 2020.08.27 |
백준 10817번 Java 세 수 내림차순 정렬 (0) | 2020.08.20 |
백준 5543번 Java 상근날드 3항 연산자로 (0) | 2020.08.19 |
댓글