프로그래머스 - 삼각 달팽이 - 배열 - Java

chaemin·2024년 6월 7일
0

프로그래머스

목록 보기
51/64

1. 문제

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

2. 풀이

은근하게 어려웠다.

방향을 ↓ → ↖
이렇게 잡아야 하고

d = (d + 1) % 3으로 수정할 수 있는 거 까지는 쉽지만 반복문을 탈출하고 그 조건을 맞추는게 어려웠다.

또한, 정답의 배열을 담는 방법이 여러가지가 있는데,

    1. ArrayList<>에 담아서 이를 array로 바꾸는 방법. 이 방법은 배열의 크기를 가늠하지 못할때 쓰는 방법인데 해당 방법에서는 배열의 크기를 가늠할 수 있었다.
    1. 배열의 크기는 v - 1까지이다. 따라서 해당 크기를 잡고 index로 배열의 인덱스를 잡아가며 풀면 되는 문제.

3. 전체 코드

import java.util.*;

class Solution {
    public int[] solution(int n) {
        
        int map[][] = new int[n][n];
        
        int[] dx = {1, 0, -1};
        int[] dy = {0, 1, -1};
        
        int x = 0;
        int y = 0;
        int d = 0;
        int v = 1;
        
        while(true){
            map[x][y] = v++;
            
            int goX = x + dx[d];
            int goY = y + dy[d];
            
            if(goX < 0 || goY < 0 || goX >= n || goY >= n || map[goX][goY] != 0){
                d = (d + 1) % 3;
                goX = x + dx[d];
                goY = y + dy[d];
                
                if(goX < 0 || goY < 0 || goX >= n || goY >= n || map[goX][goY] != 0){
                    break;
                }
            }
            x = goX;
            y = goY;
        }
        
        ArrayList<Integer> answerList = new ArrayList<>();
        
        for(int i = 0; i < n; i++){
            for(int j = 0; j <= i; j++){
                //answer[index] = map[i][j];
                answerList.add(map[i][j]);
            }
        }
        
        /*
        int[] answer = new int[value - 1];
        int index = 0;
        for(int i = 0; i < n; i++){
            for(int j = 0; j <= i; j++){
                answer[index++] = triangles[i][j];
            }
        }
        */
        
        return answerList.stream().mapToInt(Integer::intValue).toArray();
    }
}

0개의 댓글