Programmers/Lv.2

[프로그래머스][Lv.2][Java] 삼각 달팽이

dbssk 2023. 4. 8. 05:00

코딩테스트 연습 - 삼각 달팽이 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

문제 설명

정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.


제한사항
  • n은 1 이상 1,000 이하입니다.

풀이
 
1. n x n 크기의 2차원 배열 triangle 생성
 
2. 변수 x, y, num, direction 생성: x, y = 현재 좌표 / num = 현재 채우는 수 / direction = 방향
 
3. 각 행마다 삼각형을 채우기 위해 2중 for 문 사용
 
4. direction에 따라 좌표를 변경하고, 현재 위치에 num 값을 할당
 
5. direction 값을 0 -> 1 -> 2 -> 0 순서로 변경
 
6. triangle 배열에 삼각형을 모두 채운 후, 새로운 배열 answer 생성
 
7. answer 배열에 triangle 배열의 값 복사
 
8. answer 배열 반환
class Solution {
    public int[] solution(int n) {
        int[][] triangle = new int[n][n];
        int x = -1, y = 0, num = 1, direction = 0;
        // direction: 0 - down, 1 - right, 2 - up
        
        for (int i = 0; i < n; i++) {
            for (int j = i; j < n; j++) {
                if (direction == 0) {
                    x++;
                } else if (direction == 1) {
                    y++;
                } else {
                    x--;
                    y--;
                }
                triangle[x][y] = num++;
            }
            direction = (direction + 1) % 3;
        }
        
        int[] answer = new int[num - 1];
        int index = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j <= i; j++) {
                answer[index++] = triangle[i][j];
            }
        }
        return answer;
    }
}