곽로그
[백준 2439] 별찍기 -2 본문
문제출처
https://www.acmicpc.net/problem/2439
풀이방향
별찍기 1과 비슷한 문제인데 공백이라는 조건이 하나가 더 추가가 됬다. 따라서 공백에 대한 조건을 처리하기 위해 공백을 다루기 위한 변수를 하나 더 추가해주면 된다.
예를 들어 5라고 하면
1행 oooo*
2행 ooo**
3행 oo***
4행 o****
5행 *****
이렇게 변한다. 각각의 공백의 개수와 별의 개수가 행의 넘버와 어떤 관계가 있는지를 보면
1행 oooo* 공백 5-1개, 별 1개
2행 ooo** 공백 5-2개, 별 2개
3행 oo*** 공백 5-3개, 별 3개
4행 o**** 공백 5-4개, 별 4개
5행 ***** 공백 5-5개, 별 5개
이런식으로 변한다. 따라서 행을 나타내는 for문 안에 공백을 위한 for문 하나, 별을 위한 for문 하나를 넣고 각 행이 끝날 때 개행을 해주면 된다.
이때 헷갈리는 부분이 공백과 별에 대한 for문 초기화, 조건식이다. 헷갈리면 하나씩 해보면 된다. 위의 예를 다시 들어보자.
1행에서 공백은 4번 출력해야 한다. 즉 시작이 5-1이고 5-2, 5-3, 5-4 이렇게 4번 출력해야 한다.
2행에서 공백은 3번 출력해야 한다. 즉 시작이 5-2 이고 5-3,5-4 이렇게 3번 출력해야 한다.
3행에서 공백은 2번 출력해야 한다. 즉 시작이 5-3 이고 5-4 이렇게 2번 출력해야한다.
4행에서 공백은 1번 출력해야 한다. 즉 시작이 5-4이고 이걸로 끝난다.
5행에서 공백은 0번 출력해야 한다.
공백의 시작은 입력받은 수(N)에서 행의 값을 뺀 값을 초기값으로 갖고 종료조건은 1까지 출력하면 된다. 이런식으로 별을 출력하는 횟수를 생각하면 된다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int N=in.nextInt();
for(int line=1;line<=N;line++) {
for(int blank=N-line;blank>=1;blank--) {
System.out.print(" ");
}
for(int star=1;star<=line;star++) {
System.out.print("*");
}
System.out.println();
}
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준 2441] 별찍기 -4 (0) | 2019.04.09 |
---|---|
[백준 2440] 별찍기 -3 (0) | 2019.04.09 |
[백준 2438] 별찍기 -1 (0) | 2019.04.02 |
[백준 2739] 구구단 (0) | 2019.04.01 |
[백준 2742] 기찍N (0) | 2019.04.01 |