[백준] 2439: 별 찍기 -2 JAVA, 자바

xxx-sj·2023년 8월 29일
0

알고리즘

목록 보기
5/46

문제 접근

이 문제에서는 이 전 문제와는 조금 다르게 생각해야한다. 이 문제에서는 모든 줄에는 출력이 들어가야 한다. 이 전 문제에서는 별만 찍는것을 생각하였다면, 여기서는 공백또한 출력을 해주어야한다. 공백또한 출력의 대상이란 것을 생각하고 문제를 풀어보자.

첫 번째 줄을 보면 공백 4칸 + 별 1칸인 것을 볼 수 있다.
아래로 내려갈 수록 공백은 감소하고 별은 증가하여 출력되고있다. 이 문제를 내부 for문에서 두 분류로 나누어 출력한다. 하나는 공백을, 다른 하나는 별을 찍는 것이다. 잊지말아야할 것은 외부 for문은 줄 수를 내부 for문은 한 줄에 찍힐 내용을 담당하는 것이다.

전체코드


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();

//        for(int i = 0; i < N; i++) {
//            for(int j = N; j > i + 1; j--) {
//                System.out.print(" ");
//            }
//            for(int j = 0; j <= i; j++) {
//                System.out.print("*");
//            }
//            System.out.println();
//        }

        int star = 1;
        for(int i = N - 1; i >= 0; i--) {

            for(int j = 0; j < i; j++) {
                sb.append(" ");
            }

            for(int j = 0; j < star; j++) {
                sb.append("*");
            }

            sb.append("\n");
            star++;
        }

        System.out.println(sb);
    }
}

코드 상세

2가지로 문제를 해결하였다.
가장 바깥 for loop에서는 N만큼 순회하며,
내부 for loop에서는 2가지 for문을 만든다.
하나는 N으로 초기 할당한 j를 i 보다 작을 때까지 돌며
빈 공백을 출력하고, 다른 하나는 0으로 초기 할당한 j를 i 보다 작거나
같을 때까지 별을 출력한다.

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

다른 하나는 출력해야하는 별의 숫자를 변수로 만들어 출력하는 것이다.
변수는 for loop값이 하나씩 증가할때마다, 별의 숫자를 1 증가시킨다.
빈 공백은 j =0으로 초기화하고 바깥 loop i보다 작을 때 까지 출력한다.


int star = 1;
for(int i = N - 1; i >= 0; i--) {

    for(int j = 0; j < i; j++) {
        sb.append(" ");
    }

    for(int j = 0; j < star; j++) {
        sb.append("*");
    }

    sb.append("\n");
    star++;
}

System.out.println(sb);
profile
틀려도 일단 기록하자

0개의 댓글