프로그래머스 lv2 삼각달팽이

namkun·2023년 3월 4일
0

코딩테스트

목록 보기
75/79
post-custom-banner

문제 링크

삼각 달팽이

풀이

풀면서 그림을 그려봐야한다.

주어진 삼각형을 2차원 배열로 밀어넣으면, 직각삼각형 형태로 나온다.

그러면 예시로 주어진 n이 4인 정삼각형은 다음과 같이 그릴 수 있다.

주어진 그림에서 우리가 찾을 수 있는 규칙성은 다음과 같다.

고로, 위의 n이 4인 경우는 다음과 같이 나타낼 수 있다.

이 규칙성을 코드로 나타내면 다음과 같다.

import java.util.*;

class Solution {
    public int[] solution(int n) {
        int[][] matrix = new int[n][n];
        int x = 0, y = 0;
        int max = (n * (n + 1)) / 2;
        int value = 1;
        matrix[0][0] = 1;

        while(value < max){
            // move x
            while (x + 1 < n && matrix[x + 1][y] == 0) {
                matrix[++x][y] = ++value;
            }

            // move y
            while (y + 1 < n && matrix[x][y + 1] == 0) {
                matrix[x][++y] = ++value;
            }

            // move x-1, y-1
            while (y - 1 > 0 && x - 1 > 0 && matrix[x - 1][y - 1] == 0) {
                matrix[--x][--y] = ++value;
            }
        }

        List<Integer> answer = new ArrayList<>();
        for (int[] arr : matrix) {
            for (int innerValue : arr) {
                if (innerValue != 0) {
                    answer.add(innerValue);
                }
            }
        }

        return answer.stream().mapToInt(i -> i).toArray();
    }
}
profile
개발하는 중국학과 사람
post-custom-banner

0개의 댓글