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

chaemin·2024년 2월 29일
0

프로그래머스

목록 보기
2/64

0. 이차원 배열[][] 활용 문제


1. 문제

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

2. 풀이

이차원 배열로 생각해보면
1 0 0 0
2 9 0 0
3 10 8 0
4 5 6 7
이렇게 생각할 수 있고
순서대로 ↓→↖ 으로 이동한다.

  • goX, goY로 이동 후 해당 좌표가 N이나 -1(끝까지 왔다), 혹은 이미 숫자로 채워졌으면(triangles[goX][goY] != 0) 방향을 틀고 한번 더 더해준다.
  • 이동 후에도 갈 수 없는 방향이거나 (triangles[goX][goY] != 0)일 경우 break로 반복문을 빠져나온다.
if(goX == n || goY == n || goX == -1 || goY == -1 || triangles[goX][goY] != 0){
	d = (d + 1) % 3;
	goX = x + moveX[d];
	goY = y + moveY[d];
    
    if(goX == n || goY == n || goX == -1 || goY == -1 || triangles[goX][goY] != 0){
		break;
	}
}

 

2-1. ✨핵심 Point

방향전환을 할때 d = (d + 1) % 3 으로 해결.

int[] moveX = {1, 0, -1};
int[] moveY = {0, 1, -1};

 

3. 코드

class Solution {
    public int[] solution(int n) {
        
        int[][] triangles = new int[n][n];
        int[] moveX = {1, 0, -1};
        int[] moveY = {0, 1, -1};
        
        int x = 0;
        int y = 0;
        int d = 0;
        
        int value = 1;
        
        while(true){
            triangles[x][y] = value++;
            
            int goX = x + moveX[d];
            int goY = y + moveY[d];
            
            if(goX == n || goY == n || goX == -1 || goY == -1 || triangles[goX][goY] != 0){
                d = (d + 1) % 3;
                goX = x + moveX[d];
                goY = y + moveY[d];
                
                if(goX == n || goY == n || goX == -1 || goY == -1 || triangles[goX][goY] != 0){
                    break;
                }
            }
            x = goX;
            y = goY;
        }
        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 answer;
    }
}

0개의 댓글