ABOUT ME

작은 디테일에 집착하는 개발자

Today
-
Yesterday
-
Total
-
  • [백준 알고리즘/Java] 2439번 별 찍기 - 2
    IT Study/백준 알고리즘 2023. 3. 14. 10:46
    728x90

    문제를 풀기에 앞서, 별이 출력되는 원리(?)에 대해 알아보도록 하겠습니다.

     

    <원리>

    5 입력 시,

    4칸 공란 + 1개 별

    3칸 공란 + 2개 별
    ...
    0칸 공란 + 5개 별

     

    10칸 입력 시,

    9칸 공란 + 1개 별

    8칸 공란 + 2개 별
    ...
    0칸 공란 + 10개 별 

     

    <과정>

    1. 입력하는 값 n만큼 반복되어 한 줄씩 출력 (변수 n 선언 및 for문 사용)

    import java.util.*;
    public class Main {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);	// 입력 받는 변수 n
    		int n = sc.nextInt();
    		
    		for(int i = 1; i <= n; i++) {		// n번 반복하여 n줄 출력
            
    		}
    	}
    }

    이 때는 BufferedReader, BufferedWriter 사용할 줄 몰랐습니다...

     

    2. 공란(" ") 출력

    <예시>
    n = 5, i = 1 일 때

    첫 줄에서는 공란이 4개 출력되어야 한다.

    ∴ j = 1부터 j = 5 - 1 (n - i) 4번 반복
    n = 5, i = 2 일 때
    두 번째 줄에는 공란이 3개 출력되어야 한다.

    j = 1부터 j = 5 - 2 (n - i) 3번 반복
    import java.util.*;
    public class Main {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		int n = sc.nextInt();
    		
    		for(int i = 1; i <= n; i++) {
            		for(int j = 1; j <= n-i; j++) {	// 공란 출력
    				System.out.print(" ");
    			}
    		}
    	}
    }

     

    3. 별("*") 출력

    <예시>
    n = 5, i = 1 일 때
    첫 줄에서는 별이 1개 출력되어야 한다.

    ∴ k = 1부터 k = 1 (i) 1번 반복
    n = 5, i = 2 일 때
    두 번째 줄에는 별이 2개 출력되어야 한다.

    ∴ k = 1부터 k = 2 (i) 2번 반복
    import java.util.*;
    public class Main {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		int n = sc.nextInt();
    		
    		for(int i = 1; i <= n; i++) {
            		for(int j = 1; j <= n-i; j++) {
    				System.out.print(" ");
    			}
    			for(int k = 1; k <= i; k++) {	// 별 출력
    				System.out.print("*");
    			}
    		}
    	}
    }

     

    4. 한 줄 출력 후 띄어쓰기

    import java.util.*;
    public class Main {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		int n = sc.nextInt();
    		
    		for(int i = 1; i <= n; i++) {
            		for(int j = 1; j <= n-i; j++) {
    				System.out.print(" ");
    			}
    			for(int k = 1; k <= i; k++) {
    				System.out.print("*");
    			}
                 	System.out.println();	// 한 줄 띄어쓰기
    		}
    	}
    }

     

    <최종 제출본>

    import java.util.*;
    public class Main {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		int n = sc.nextInt();
    		
    		for(int i = 1; i <= n; i++) {
            		for(int j = 1; j <= n-i; j++) {
    				System.out.print(" ");
    			}
    			for(int k = 1; k <= i; k++) {
    				System.out.print("*");
    			}
                 	System.out.println();
    		}
    	}
    }

     

     

    2439번 문제를 풀며, 제가 앞으로 고쳐야 할 부분에 대해 알게 되었습니다..

    <고쳐야 하는 것들 (ft. 이상한 고집)>

    1. for문의 초기화식(int i, j, k 등..)을 0으로 초기화하려고 한다.
    2. for문의 조건식에 =(등호)를 포함하지 않으려고 한다.
Designed by Tistory.