본문 바로가기

코딩 테스트/프로그래머스

[프로그래머스 Level 2, Java] 삼각 달팽이

728x90
반응형

문제 : 삼각 달팽이


풀이 방법

1. 자바는 일반적인 c 언어 형식의 2차원 배열이 존재하지 않는다는 것을 배웠다.

이것을 활용하여 피라미드 형태의 배열을 만들 수 있다.

 

2. 삼각 달팽이의 숫자는 반시계 방향으로 위에서부터 가장 끝에서 마지막으로 증가하며 이동한다

 

증가하는 값을 만들어 놓고 왼쪽라인 밑라인 오른쪽라인을 순서대로 배열에 대입하면 된다.


소스 코드

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
class Solution {
    public int[] solution(int n) {
        int[] answer = {};
        ArrayList<ArrayList<Integer>> lists = new ArrayList<>();

        for(int i=1; i<=n; i++) {
            ArrayList<Integer> list = new ArrayList<>(Collections.nCopies(i, 0));
            lists.add(list);
        }

        int recordNumber = 1;
        int leftIndex = -1, downIndex = 0;

        for(int i=n; i>0; i-=3) {
            // Left Line
            for(int u = 0; u < i; u++) {
                lists.get(++leftIndex).set(downIndex, recordNumber++);
            }
            // Down Line
            for(int u = 0; u < i - 1; u++) {
                lists.get(leftIndex).set(++downIndex, recordNumber++);
            }
            // Right Line
            for(int u = 0; u < i - 2; u++) {
                lists.get(--leftIndex).set(--downIndex, recordNumber++);
            }
        }

        ArrayList<Integer> tmpList = new ArrayList<>();
        lists.forEach(tmpList::addAll);

        answer = tmpList.stream().mapToInt(Integer::intValue).toArray();
        return answer;
    }
}

 

728x90
반응형