Algorithm/JUNGOL

[정올] 1338 : 문자삼각형1 (**)

Gyuri 2022. 1. 17. 18:43

문제

삼각형의 높이 N을 입력받아서 아래와 같이 문자 'A'부터 차례대로 왼쪽 대각선으로 채워서 삼각형 모양을 출력하는 프로그램을 작성하시오.

 

<처리조건>

(1) 오른쪽 위부터 왼쪽 아래쪽으로 이동하면서 문자 'A'부터 차례대로 채워나간다.

(2) N번 행까지 채워지면 다시 오른쪽 둘째 행부터 왼쪽 아래로 채워나간다. 

(3) 삼각형이 모두 채워질 때까지 반복하면서 채워 나간다. (문자 'Z'다음에는 'A'부터 다시 시작한다.)

입력형식

삼각형의 높이 N(N의 범위는 100 이하의 양의 정수)을 입력받는다.

출력형식

주어진 형태대로 높이가 N인 문자삼각형을 출력한다. 문자 사이는 한 개의 공백으로 구분한다.

입력 예

5

출력 예

        A
      B F
    C G J
  D H K M
E I L N O
 

코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        char arr[][] = new char[n][n];

        char ch = 'A';

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                arr[i][j] = '\0'; // 널값으로 초기화
            }
        }

        // 15
        // 24
        // 33
        // 42
        // 51

        // 25
        // 34
        // 43
        // 52
        // 35
        // 44
        // 53
        for (int i = 1; i <= n; i++) { // 1 2 3 4 5
            for (int j = i, k = n; j <= n; j++, k--) { // 12345 - 54321 // 2345 5432 // 345 543 // 45 54 // 5 5
                arr[j-1][k-1] = ch++;
                if (ch > 'Z')
                    ch = 'A';
            }
        }

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                System.out.print(arr[i][j] + " ");

                if (arr[i][j] == '\0') {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }

        sc.close();
    }
}

▶ 배열을 생성한 후 우선 모든 배열 전체를 null값으로 채워주고 규칙에 따라 해당하는 위치에만 알파벳을 넣어줘야 함

이중 for문은 자주 써봤지만, 하나의 for문 안에서 여러 개의 연산을 처리해본적은 없어서 어려웠다.

',' 로 구분해서 위와 같이 작성해주면 됨.

 

▷ i는 '처음 시작하는 행의 위치' 로 1-5까지 1씩 증가하고, j는 '행의 위치'로, i부터 n까지 증가한다. 즉, 12345 -> 2345 이런식으로

k는 '열의 위치' 로 n부터 1씩 감소한다 (54321 5432 543) -> 이런식으로!