https://www.acmicpc.net/problem/2439
- 문제
여기서 이전 별찍기 1과 다르게, 모든 별은 우측정렬로 출력해야한다. 그럼 for문안에서의 동작을 모두 역순으로 바꿔줘야한다.
다시말해, 별찍기 -1- 에서의 *을 공백으로, 공백을 *로 찍히게 하면된다.
즉, 1행에는 4개의 공백, 2행에는 3개의 공백...4행에는 1개의 공백 5행에는 0개의 공백
N번째행에서 N-별의 갯수=공백 이 성립되어야 한다.
아래와 같이 설정할경우 공백의 여부와 관계없이 *가 각줄마다 하나만 출력될 수 있다.
for(int i=1; i<=N; i--){
for(int j=1; j<=N-i; j++){
System.out.print(" ");
}
System.out.println("*");
}
그래서 .. 별표의 개수를 늘리기 위한 for을 하나더 만들어 줘야한다.
for(int i=1; i<=N; i_++){
for(int j=1; j<=N-1; j++){
System.out.print(" ");
}
for(int k=1; k<=i; k++){
System.out.print("*");
}
}
이런식으로 공백을 시작으로 * 로 끝내면 된다.
- 코드 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 i=1; i<=N; i++){
for(int j=1; j<=N-i; j++){
System.out.print(" ");
}
for(int k=0; k<i; k++){
System.out.print("*");
}
System.out.println();
}
}
}
- 결과
- 코드 2
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int N=Integer.parseInt(br.readLine());
br.close();
StringBuilder sb=new StringBuilder();
for(int i=1; i<=N; i++){
for(int j=1; j<=N-i; j++){
sb.append(' ');
}
for(int k=1; k<=i; k++){
sb.append('*');
}
sb.append('\n');
}
System.out.print(sb);
}
}
StringBuilder을 사용하더라도 전체적인 로직은 같기에 사용법만 잘 숙지해 기존의 System.out.print를 sb.append로 바꿔주고 최종출력문만 System.out.print(sb); 로 한꺼번에 담았다 출력하게 바꿔주면 된다.
- 결과
- 코드 3
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.IOException;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
int N=Integer.parseInt(br.readLine());
br.close();
for(int i=1; i<=N; i++){
for(int j=1; j<=N-i; j++){
bw.write(' ');
}
for(int k=1; k<=i; k++){
bw.write('*');
}
bw.newLine();
}
bw.flush();
bw.close();
}
}
- 결과
- 코드 1, 2, 3 성능 비교
'Computer Science > BAEKJOON JAVA Practice' 카테고리의 다른 글
[백준]10952번: A+B-5 (0) | 2022.01.13 |
---|---|
[백준]10871번: X보다 작은 수 (0) | 2022.01.13 |
[백준]2438번: 별 찍기 -1 (0) | 2022.01.12 |
[백준]11022번: A+B-8 (0) | 2022.01.11 |
[백준]2742번: 기찍N (0) | 2022.01.11 |