문제
첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제
하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.
입력
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
출력
첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.
2438 별찍기 문제에서 조금 더 변형시켜야 하는 문제!
2438 별찍기 문제에서는
*
**
***
****
*****
형태로 출력이 돼야 했으니까, 아래처럼 문제를 풀었다.
for( i는 1부터 N까지, 1씩 증가) { -------- ( 1 )
for ( j는 1부터 i까지, 1씩 증가) { -------- ( 2 )
* 출력
}
}
하지만 이제 앞부분 공백이 들어가고, 우측 정렬로 출력이 되어야 하니까,
(1) 번 for문 안에 공백 출력하는 for 구문과, *을 출력하는 for 구문 두 개를 작성해줬다.
for ( i는 1부터 N까지, 1씩 증가 ) { ------ (1)
for ( j는 0부터 (N-i)-1까지, 1씩 증가 ) { ------ (2) // for ( j=0; j<N-i; j++)
공백 " " 출력
}
for ( k는 j부터 N-1까지, 1씩 증가 ) { ------ (3) // for ( k=j; k<N; k++)
* 출력
}
개행
}
(1)은 똑같이 1~N으로 설정하고, (총 5줄 출력)
(2)번 for문은 공백을 출력한다.
- 0부터 N-i까지, 즉 첫번째 라인 (i=1) 일 때는 공백이 4개, 두 번째 라인 (i=2)일 때는 공백이 3개여야 하므로 n-i 로 설정한다.
(3)번 for문에서는 *을 출력한다.
- j부터 N-1까지인데, 이유는 (2)번 for문에서 공백이 출력이 되었으므로, 그 개수 이후부터, N개만큼 출력되어야 한다.
예를 들어, 두 번째 라인 (i=2)일 때, j는 0부터 (N-i)-1 (== 2) 까지 총 3번 출력되었을 것이다.
이 때 남은 2개는 *이 출력되어야 하므로, 조건을 k는 j부터, k < N 으로 설정해주면 3, 4 이렇게 두 번 반복한다.
소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner scan = new Scanner(System.in); int N = scan.nextInt(); int j; for (int i=1; i<=N; i++) { for (j=0; j<N-i; j++) { System.out.print(" "); } for (int k=j; k<N; k++) { System.out.print("*"); } System.out.print("\n"); } } } | cs |
'프로그래밍 > JAVA' 카테고리의 다른 글
acmicpc(baekjoon) - 10952 : A +B -5 (0) | 2021.03.01 |
---|---|
acmicpc(baekjoon) - 10871 : X보다 작은 수 (0) | 2021.03.01 |
acmicpc(baekjoon) - 2438 : 별 찍기 - 1 (0) | 2021.02.22 |
acmicpc(baekjoon) - 11022 : A+B -8 (0) | 2021.02.22 |
acmicpc(baekjoon) - 11021 : A+B - 7 (0) | 2021.02.22 |