[프로그래머스] LEVEL2 삼각달팽이 JAVA

Pixel Dophin·2023년 9월 9일
0

프로그래머스

목록 보기
54/55

삼각달팽이

문제링크

풀이

구현
1. len에 삼각형에 들어갈 숫자의 개수를 구한다. 변의 길이가 주어졌을 때, 1부터 변의 길이 n까지의 합이 정답이었다.
2. triagle, x, y등을 초기화한다.
3. dx, dy를 통해 이동방향을 미리 저장하여 초기화한다. (아래, 오른쪽, 북서방향)
4. len의 개수 길이 만큼 아래를 과정을 반복한다.

  • triagle[x][y]에 현재 i를 저장한다.
  • testX, testY에 다음 이동 위치를 저장한다.
  • 만약 다음 이동 위치가 삼각형 범위 안이고 아직 작성되지 않은 부분이라면 testX, testY를 다음 위치로 최종 결정한다.
  • 만약 위 조건을 만족하지 못했다면, 다음 방향으로 방향을 바꾸어 x, y를 이동시킨다.
  1. 위에서 부터 순서대로 삼각형 모양의 숫자를 answer에 저장한다.

코드

class Solution {
    public int[] solution(int n) {
        int len = n * (n + 1) /2;
        int[] answer = new int[len];
        
        int[][] triagle = new int[n][n];
        int x = 0;
        int y = 0;
        int[] dx = new int[] {1, 0, -1};
        int[] dy = new int[] {0, 1, -1};
        int d = 0;
        
        for (int i = 1; i <= len; i++){
            triagle[x][y] = i;
            
            int testX = x + dx[d];
            int testY = y + dy[d];
            
            if (0 <= testX && testX < n && 0 <= testY && testY < testX + 1 
                && triagle[testX][testY] == 0) {
                x = testX;
                y = testY;
            } else {
                d = (d + 1) % 3;
                x += dx[d];
                y += dy[d];
            }
        }
        
        int idx = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0 ; j < i + 1; j++) {
                answer[idx++] = triagle[i][j];
            }
        }
        
        return answer;
    }
}
profile
안녕 👋 성장하고픈 개발자 💻 입니다

0개의 댓글

관련 채용 정보