ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 삼각 달팽이
    코테/프로그래머스 2024. 8. 6. 20:58

    class Solution {
        public int[] solution(int n) {
            // 삼각형을 표현할 2 차원 배열과 채워넣을 숫자 선언
            int[][] triangle = new int[n][n];
            int v = 1; // v 는 채워넣을 숫자로 숫자를 triangle 에 기록할 때마다 1 씩 증가
            int x = 0; // 숫자 초기화 (0,0) 을 위해
            int y = 0;
            
            while (true) {
                // 아래로 이동하기
                while (true) {
                    triangle[y][x] = v++; // 2 차원 배열은 y,x 로 생각해야함
                    if (y + 1 == n || triangle[y + 1][x] != 0)
                        break;
                    y += 1; // 아래로 진행하는 것은 y 값의 증가 때문이므로
                }
                // 오른쪽으로 이동할 수 있는 경우 반복문 탈출하도록 작성
                // 오른쪽으로 이동할 수 있을 때만 진행
                if (x + 1 == n || triangle[y][x + 1] != 0)
                    break;
                x += 1;
                
                // 오른쪽으로 이동하기
                while(true) {
                    triangle[y][x] = v++;
                    if(x + 1 == n || triangle[y][x + 1] != 0)
                        break;
                    x += 1;
                }
                if(triangle[y - 1][x - 1] != 0) 
                    break;
                x -= 1;
                y -= 1;
                
                // 왼쪽으로 이동하기
                while(true) {
                    triangle[y][x] = v++;
                    if(triangle[y - 1][x - 1] != 0)
                        break;
                    x -= 1;
                    y -= 1;
                }
                if(y + 1 == n || triangle[y + 1][x] != 0)
                    break;
                y += 1;
            }
            // 채운 숫자들을 1 차원 배열로 구성하여 반환
            // v 변수는 채워 넣은 마지막 숫자 + 1 이 있으므로  v - 1
            int[] result = new int[v - 1];
            
            // 2 차원 배열에서는 삼각형이 왼쪽으로 몰려 있는 직각 삼각형 모양으로 들어있다는 것을
            // 이용하여 이중 반복문으로 1 차원 배열에 숫자를 넣어줌
            int index = 0;
            for(int i = 0; i < n; i++){
                for(int j = 0; j <= i; j++){
                    result[index++] = triangle[i][j];
                }
            }
            return result;
        }
    }

     

    '코테 > 프로그래머스' 카테고리의 다른 글

    교점에 별 만들기  (6) 2024.08.02
    A 강조하기  (0) 2024.07.31
    아이스 아메리카노  (0) 2024.07.30
    피자 나눠 먹기 (3)  (0) 2024.07.30
    옷가게 할인 받기  (0) 2024.05.02
Designed by Tistory.