Algorithm/Baekjoon

[Baekjoon] 백준 2439 별찍기 2 - java

담크 2021. 6. 29. 23:28

오늘은 어제 포스팅했던 별 찍기에서 위치만 바뀐 (오른쪽으로 정렬한) 별 찍기에 대해 정리해보려고 합니다.

문제는 https://www.acmicpc.net/problem/2439

 

2439번: 별 찍기 - 2

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.

www.acmicpc.net

여기에 있습니다.

 


문제풀이

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

public class Main {
	
	public static void main(String[] args) throws NumberFormatException, IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int a = Integer.parseInt(br.readLine());
		
		for(int i = 0; i < a; i++) {
			for(int j = a; j > i +1; j--) {
				System.out.print(" ");
			}
			for(int k = 0; k < i+1; k++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}

}

 

사실 이번에도 Scanner를 사용해서 출력해도 상관은 없지만 저번 포스팅과 약간의 차이를 주기 위해서 BufferedReader를 사용해봤습니다.

(사실 Scanner 보다는 BufferdReader를 사용하는것이 실행시간도 줄이고 여러모로 유용하긴 합니다 ㅎㅎ)

 

이 문제가 저번의 별찍기와 비슷하면서 어려운 이유는 앞에 공백을 어떻게 해야 할지 처음엔 막막하기 때문인데요

단순히 공백으로 보는것이 아닌 별의 개수로만 보면 i = 0일 때 j = 0 ~ j = 3까지 아무것도 없다가 j = 4일 때 별을 어떻게 1개를 찍지? 하는 생각이 들어서 일거라고 생각합니다.

 

공백 부분은 X로 별 부분을 O로 표시해보면

출력 결과는

X X X X O

X X X O O

X X O O O

X O O O O

O O O O O                                            이렇게 나옵니다.

 

이제 좀 감이 잡히시나요? 

 

결국 별을 반대로 찍는 것은 공백으로 표시된 역삼각형 하나와 별로 표시된 삼각형 총 2개의 삼각형으로 이루어져 있습니다. 그래서 for문 안에 for문을 사용하되 2개의 for문으로 나누어서 값을 입력받아야 하는 것입니다.

이것에 유의해서 코딩해보면

예제와 같이 잘 출력되는 것을 확인할 수 있습니다.