오늘은 어제 포스팅했던 별 찍기에서 위치만 바뀐 (오른쪽으로 정렬한) 별 찍기에 대해 정리해보려고 합니다.
문제는 https://www.acmicpc.net/problem/2439
여기에 있습니다.
문제풀이
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문으로 나누어서 값을 입력받아야 하는 것입니다.
이것에 유의해서 코딩해보면
예제와 같이 잘 출력되는 것을 확인할 수 있습니다.
'Algorithm > Baekjoon' 카테고리의 다른 글
[Baekjoon] 백준 1157 단어공부 - java (0) | 2021.07.12 |
---|---|
[Baekjoon] 백준 1110 더하기 사이클 - java (0) | 2021.07.11 |
[Baekjoon] 백준 10871 X보다 작은 수 - java (0) | 2021.07.10 |
[Baekjoon] 백준 2884 알람시계 - java (2) | 2021.07.02 |
[Baekjoon] 백준 2438 별찍기 1 - java (2) | 2021.06.28 |