본문 바로가기

이론/문제풀이

[백준-10992] 별 찍기 17 -Java

입출력 관련 문제를 모두 풀어보았다.

하나정도는 기록해두려고 한다.


String 다루는 문제가 자주 나온다고하여 String 함수를 활용하려고 최대한 노력했다.



예제를 하나 보면,

* * * * * *******

이렇게 출력되도록 코드를 짜는 문제이다.


규칙은 단순하다.


첫번째줄 - 정 중앙에 1개의 *

두 번째~마지막에서 두번째줄- 두개를 출력하나, 그 사이의 간격이 두칸씩 떨어진다.

마지막줄- 2*N -1 개의 * 꽉채워서 



문제를 좀 다르게 바라보기로 했다.



이러면 좀 쉬워지나?


이 규칙을 바탕으로 문제풀이 성공.

아 N=1일때는 예외처리를 해주는게 편할듯 하다

import java.util.Scanner;
class Main{
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        int N=scan.nextInt();
        int bs=N; // 왼쪽 별의 자릿수를 위한 변수 -> N으로 초기화
        int ls=2; // 오른쪽 별의 자릿수를 위한 변수
        String star="*";
        String fstar=star;

        if(N==1) {//Base case
        	System.out.println("*");
        	return;
        }
        System.out.println(String.format("%"+(bs--)+"s", star)); //일단 하나 출력
        //왼쪽 별의 자릿수 하나 감소 
        for(int i=0; i<N-2; i++)
        {
        	System.out.println(String.format("%"+(bs--)+"s", star)+String.format("%"+(ls)+"s", star));
        	ls+=2;//오른쪽 별의 자릿수 +2    
        	fstar+="**";//맨 마지막 별 출력을 위해 별 갯수 누적 
        }
        System.out.println(fstar+"**");//누적된 별의 수 + ** -
       
    }
} 
어려운 문제는 아니지만 실수 안하기 힘든 문제였다.