곽로그

[백준 2439] 별찍기 -2 본문

알고리즘/백준

[백준 2439] 별찍기 -2

일도이동 2019. 4. 2. 22:19
반응형

문제출처

https://www.acmicpc.net/problem/2439

 

2439번: 별 찍기 - 2

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

www.acmicpc.net

 

풀이방향

 별찍기 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
Comments