본문 바로가기

프로그래머스(Java)/Level 2

[프로그래머스] 삼각 달팽이

728x90

코드 힌트:

  1. 배열의 크기와 최대 값 계산:
    • 주어진 n에 대해 삼각형 배열을 채울 수 있는 최대 숫자를 계산한 후, 이 값을 기반으로 배열을 설정합니다.
  2. 순차적으로 값 채우기:
    • 삼각형 형태로 숫자를 순차적으로 채우는 방식은 방향을 반복하며 이루어집니다.
    • 첫 번째 방향은 아래로, 두 번째는 오른쪽으로, 세 번째는 대각선 위로 이동합니다.
  3. 배열에 값을 채우고 결과 반환:
    • 2차원 배열에서 값을 채운 후, 이를 1차원 배열로 변환하여 반환합니다.

 


정답은 더보기 클릭

더보기
class Solution {
    public int[] solution(int n) {
        int max = n * (n + 1) / 2;  // 삼각형에 들어갈 최대 숫자 계산
        int[][] map = new int[n][n];  // 삼각형을 채울 2차원 배열 생성
        int[] result = new int[max];  // 결과를 저장할 1차원 배열
        
        int el = 1;  // 채워질 숫자
        int x = -1, y = 0;  // 시작 좌표, x는 -1부터 시작해 첫 행에서 0으로 이동
        
        // 숫자를 순차적으로 삼각형 형태로 채워나감
        for (int i = 0; i < n; i++) {
            for (int j = i; j < n; j++) {
                if (i % 3 == 0) {  
                    x++;  // 아래로 이동
                } else if (i % 3 == 1) {
                    y++;  // 오른쪽으로 이동
                } else {
                    x--;  // 대각선 위로 이동
                    y--;
                }
                map[x][y] = el++;  // 해당 좌표에 숫자 저장
            }
        }
        
        // 2차원 배열에서 1차원 배열로 변환
        int idx = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j <= i; j++) {
                result[idx++] = map[i][j];  // 각 요소를 result 배열에 저장
            }
        }
        
        return result;  // 결과 반환
    }
}
728x90