상세 컨텐츠

본문 제목

삼각 달팽이 (월간 코드 챌린지 시즌1)

프로그래머스 코딩테스트 풀이

by 발발개발 2022. 7. 15. 15:24

본문

원본 : https://school.programmers.co.kr/learn/courses/30/lessons/68645

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이

class Solution {
    public int[] solution(int n) {
        int[][] arr = new int[n][n];
        int last = 0;

        for (int i = 1; i <= n; i++) {
            last += i;
        }

        int downNum = n - 1;
        boolean down = true;
        int rightNum = n - 1;
        boolean right = false;
        int upNum = 1;

        int num = 1;
        int i = 0;
        int j = 0;

        while (num != last) {
            if (down) {
                arr[i++][j] = num++;

                if (i == downNum) {
                    right = true;
                    down = false;

                    downNum--;
                }
            } else if (right) {
                arr[i][j++] = num++;

                if (j == rightNum) {
                    right = false;

                    rightNum -= 2;
                }
            } else {
                arr[i--][j--] = num++;

                if (j == upNum) {
                    down = true;

                    upNum++;
                }
            }
        }

        arr[i][j] = last;

        int[] answer = new int[last];
        int idx = 0;

        for (i = 0; i < n; i++) {
            for (j = 0; j < n; j++) {
                if (arr[i][j] == 0) {
                    break;
                } else {
                    answer[idx++] = arr[i][j];
                }
            }
        }

        return answer;
    }
}

관련글 더보기

댓글 영역