본문 바로가기

알고리즘(Algorithm)

숫자 피라미드

문제


N과 시작 숫자 S가 주어지면 숫자 피라미드를 만드는 프로그램을 작성하시오.
예를 들어, N이 5이고 S가 3 이라면, 그 숫자 피라미드는 다음과 같다.

 

 
 
  • 시작 숫자 S는 꼭대기부터 1씩 증가한다.
  • 시작 행의 번호가 1번이라고 했을때, 짝수번째 행은 왼쪽에서 오른쪽으로 1씩 증가하도록 적고, 홀수번째 행은 거꾸로 적는다.
  • 숫자가 만약 10이 될 경우, 1로 바꾸고 다시 증가한다.  

입력


입력의 첫 번째 줄에 N과 시작 숫자 S가 주어진다. ( 1≤N≤100, 1 ≤S≤ 9)

 

출력


첫 번째 줄부터 숫자 피라미드를 출력한다. (각 줄에 존재하는 공백의 개수와 숫자의 개수를 정확하게 확인해주시바랍니다.)

 

예제 입력

 
5 3

예제 출력

 

 

 

import java.util.Scanner;
public class Main{
    public static void main(String[] args){

        Scanner sc = new Scanner(System.in);

        int top =sc.nextInt();
        int fsu = sc.nextInt();
        int space =top-1;
        int oddBefore = 0;
        int evenBefore = 0;
        int oddfirst = 0;
        int floor = 0;


        for(int i=1;i<=top;i++){
            //공백 층수 -1개부터 하나씰 줄면서 공백
            for(int k=0;k<space;k++){
                System.out.print(" ");
            }
            space--;
            // 층 수 저장
            floor =i;
            if(i%2==0){//짝수층이면 증가
                //시작은 이전층의 +1
                //짝수층의 숫자 갯수는 2*층수-1
                for(int j=0;j<2*floor-1;j++){// 짝수층 출력
                    oddBefore++;
                    // 10 이상일 경우 1로 회귀
                    if(oddBefore>=10){
                        oddBefore =1;
                    }
                    System.out.print(oddBefore);
                }
                // 짝수층 마지막 저장
                evenBefore = oddBefore;
            }else{// 홀수층 이면 감소
                if(i==1){ // 첫번쨰 층은 받아온 두번째 수
                    oddfirst = fsu;
                    // 짝수층을 위해 전 홀수층 시작수 저장
                    oddBefore =oddfirst;
                }else{ // 두번쩨 홀수층은 짝수층 마지막수로 로직처리
                    // 짝수층 마지막 수에 2*홀수층+1하면 홀수층 시작 수
                    for(int j=0;j<2*floor-1;j++){
                        evenBefore++;
                        // 10 이상일 경우 1로 회귀
                        if(evenBefore>=10){
                            evenBefore =1;
                        }
                    }
                    // 홀수층 시작수 저장
                    oddfirst = evenBefore;
                    //짝수층을 위해 전 홀수층 시작수 저장
                    oddBefore =oddfirst;
                }
                //홀수층의 숫자 갯수는 2*층수-1
                for(int j=0;j<2*floor-1;j++){// 홀수층 출력
                    System.out.print(oddfirst );
                    oddfirst--;
                    // 0이면 1로 회귀
                    if(oddfirst<=0){
                        oddfirst =9;
                    }
                }
            }

            // 출력 한층 끝나면 줄바꿈
            System.out.println();
        }
      
    }
}

 

'알고리즘(Algorithm)' 카테고리의 다른 글

array 3  (1) 2023.06.05
점수 계산  (1) 2023.06.04
최댓값  (0) 2023.06.04
역으로 출력하기  (0) 2023.05.24
소수 판별 2  (0) 2023.05.24