(Python, Java) 프로그래머스 - 삼각 달팽이

[문제 링크]

Python 풀이

from itertools import chain


def solution(n):
    graph = [[0] * (x + 1) for x in range(n)]
    x, y = -1, 0  # 시작 좌표
    num = 1
    for i in range(n):  # 방향 0아래 ,1오른쪽,2 위
        for _ in range(i, n):  # 방향을 틀때마다 삽입 개수가 1개씩 줄어든다
            if i % 3 == 0:  # 아래
                x += 1
            elif i % 3 == 1:  # 오른쪽
                y += 1
            else:  # 상
                x -= 1
                y -= 1
            graph[x][y] = num
            num += 1

    return list(chain(*graph))

총 n번만큼 방향을 바꾸게 되고, 방향을 틀때마다 채워야하는 개수가 1개씩 줄어든다는 점을 이용하면 쉽게 풀 수 있다.


itertools의 chain은 리스트를 합쳐주는 기능을 제공한다.

from itertools import chain

a = [[1,2,3],[4,5,6],[7,8,9]]

b = list(chain(*a))
print(b) # [1, 2, 3, 4, 5, 6, 7, 8, 9]

a = [1,2,3]
b = [4,5,6]
c = [7,8,9]
d = list(chain(a,b,c))
print(d) # [1, 2, 3, 4, 5, 6, 7, 8, 9]

Java 풀이

import java.util.ArrayList;
import java.util.List;

class Solution {
    public int[] solution(int n) {
        int[][] graph = new int[n][];

        for (int i = 0; i < n; i++) {
            graph[i] = new int[i + 1];
        }

        int x = -1, y = 0;
        int num = 1;
        for (int i = 0; i < n; i++) {
            for (int j = i; j < n; j++) {
                if (i % 3 == 0) {
                    x += 1;
                } else if (i % 3 == 1) {
                    y += 1;
                } else {
                    x -= 1;
                    y -= 1;
                }
                graph[x][y] = num;
                num += 1;
            }
        }

        List<Integer> answer = new ArrayList<>();
        for (int[] arr : graph) {
            for (int number : arr) {
                answer.add(number);
            }
        }

        return answer.parallelStream().mapToInt(Integer::intValue).toArray();
    }
}

© 2021. By Backtony