본문 바로가기
알고리즘 문제

[알고리즘 문제] Number Reverse Triangle

by 박연호의 개발 블로그 2019. 3. 23.


import java.util.Scanner;

public class Main {
public static void main(String[] args) {

Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] ary = new int[n][n];
int count = 0;
int x, y; // 배열 내에서의 x,y좌표

for (int i = 0; i < n; i++) { // 대각선 방향으로 형성되는 군집을 제어
x = i; // 가로방향을 기준으로 counting하기 때문에 x값을 변하고 y는 0으로 고정
y = 0;

while (x >= 0) { // 하나의 군집에서 x값이 --되면서 0이 될때까지 반복
count++;
ary[y][x] = count;
x--; // 군집에서 x를 감소하는 방향
y++; // 군집에서 y는 증가하는 방향
}

}

for (int s = 0; s < n; s++) {
for (int f = 0; f < n; f++) {
if (ary[s][f] != 0) {
System.out.print(ary[s][f] + " ");
}
}
System.out.println("");
}
}
}


위의 문제는 역직각삼각형 모양으로 숫자를  출력하는데 출력되는 숫자의 규칙이 ↙ 방향으로 증가하면서 출력된다. 출력되는 모양을 아래와 같이 그릴 수 있는데, ↙방향으로 형성된 하나의 구역을 군집이라고 한다.

 for문은 군집의 개수만큼 반복하고 내부에서 군집내의 숫자를 출력한다. 아래의 사진에서  군집내의 숫자의 좌표값, x,y값이 서로 반대로 증가하게 되는데 x,y값을 가감하고 count값을 하나씩 증가하면서 배열에 값을 추가하게 된다. 종료시점은 x가 끝에 도착하였을 때(x가 0이 되는 경우)가 된다.