티스토리 뷰

CodingTest

삼각 달팽이 (Java, 2D, 프로그래머스)

기억용블로그 2022. 8. 19. 15:13
728x90

최대값 구하는 개념과 이중 while loop를 돌며 값을 채워주는 개념까지는 잘 적용하였으나 내부 while loop를 세부적으로 구현할때 문제가 생겨 다른 사람의 풀이를 참고하였다.

 

해당 풀이에서의 핵심은 이동을 하고 값의 유효성을 확인하는 것이 아니라 이동할 좌표가 이미 값이 채워졌는지 확인(arr[y + 1][x] or arr[y][x + 1]과 같이) 하고 0이 아닌 값으로 이미 채워져있다면 이미 해당 좌표를 들렀다는 의미이므로

해당 좌표로 이동하지 않고 내부 while loop를 break시키는게 핵심이었다.

 

헷갈리는 while loop + 헷갈리는 array index 문제의 조합이라 매우 헷갈렸다.

while loop와 array index에 대해 좀 더 심도있게 공부해야 할 필요를 느낀다.

 

class Solution {
    public int[] solution(int n) {
        var arr = new int[n][n];
        var limit = (n * (n + 1)) / 2;
        var answer = new int[limit];
        var number = 1;
        
        var y = 0; var x = 0;
        arr[0][0] = 1;
        while (true) {
            if (number == limit) break;
            
            while (y + 1 < n) {
                if (arr[y + 1][x] != 0) break;
                arr[++y][x] = ++number;
            }
            while (x + 1 < n) {
                if (arr[y][x + 1] != 0) break;
                arr[y][++x] = ++number;
            }
            while (y - 1 > 0 && x - 1 > 0) {
                if (arr[y - 1][x - 1] != 0) break;
                arr[--y][--x] = ++number;
            }
        }
        var index = 0;
        for (var i = 0; i < n; i++) {
            for (var j = 0; j <= i; j++) {
                answer[index++] = arr[i][j]; 
            }
        }
        
        return answer;
    }
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함