상냥한 세상 :: [백준]2439번: 별 찍기 -2

본문으로 바로가기

[백준]2439번: 별 찍기 -2

category Computer Science/BAEKJOON JAVA Practice 2022. 1. 13. 14:00

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

 

2439번: 별 찍기 - 2

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

www.acmicpc.net

  • 문제

여기서 이전 별찍기 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 성능 비교

Scanner 사용
BufferedReader + StrinbBuilder 사용
BufferedReader+BufferedWriter 사용

'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