[JAVA] 백준 2439. 별 찍기 – 2

이 글은 읽는데 약 4분이 걸립니다.

※개인 공부 목적의 정리글입니다.
이 글의 내용이 최선의 해답은 아닐 수 있습니다.

문제

403 Forbidden

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제

하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.

입력

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

출력

첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.
ex)

5    *
   **
  ***
 ****
*****

요약

숫자 N을 입력 받으면 별을 출력하되, 첫째 줄에서 N-1칸의 공백 뒤에 *이 1개 붙는다.
그 다음 줄에는 N-2칸의 공백 뒤에 *이 2개 붙는다.

이런 식으로 총 N줄을 출력한다.

나의 코드

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

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();
        
        int N_space = N - 1;
        int N_star = 1;
        
        for(int i=0; i<N; i++){
            sb.append(repeat(" ", N_space));
            sb.append(repeat("*", N_star));
            sb.append("\n");
            
            N_space--;
            N_star++;
        }
        
        System.out.println(sb.toString());
        br.close();
    }
    
    private static String repeat(String c, int N){
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<N; i++){
            sb.append(c);
        }
        return sb.toString();
    }

}

출력은 StringBuilder에 미리 문자열을 모두 완성 시킨 후 한번에 출력하였다.

먼저 각 줄에서 공백의 수와 별의 개수를 기억 할 변수를 만들었다.
공백의 개수는 N-1부터 시작하고, 별의 개수는 1부터 시작한다.

N번 반복하면서 공백의 개수만큼 공백을 붙이고, 별의 개수만큼 별을 붙인 후 개행 문자를 넣어 한줄을 완성시킨다.

이후 공백의 개수는 1 줄이고, 별의 개수는 1 늘린다.

추가로 특정 문자를 n번 반복해서 리턴하는 repeat 함수를 만들어 보기 편하게 하였다.

나의 코드 – 개선점

나는 Java11을 이용하였다. Java11 부터는 String 자체에 repeat이라는 메소드가 추가되어서 굳이 위의 코드처럼 repeat 메소드를 직접 구현해서 쓸 필요가 없다고 한다.

"A".repeat(3);  // AAA

여담으로 파이썬은 아래와 같이 곱하기 연산으로 문자열을 반복할 수 있다.

"A" * 3  # AAA

댓글