You will be fine

6. 삼각달팽이 (프로그래머스)

by BFine
반응형

가. 문제파악

 1. 유형 : 배열 활용, 수학

    -   처음 봤을때 수학 규칙을 찾으려고 하다보니 이해도 어렵고 구현하기도 쉽지 않았다.

    -   다른사람의 풀이들을 봤는데 규칙으로 찾거나 배열을 활용해서 푼게 있었다.

    -   내가봤을때 배열을 활용하는게 이문제가 원하는 부분이 아닐까? 라는 생각이 들었다.

 

나. 코드 

 1. 풀이 : 피라미드를 2차원배열로 붙이자 

    -  피라미드 자체로 보다보면 보기가 어렵고 1차원 배열로만 생각하게 되어버린다...

    -  그림처럼 2차원배열로 생각하면 쉽다. 아래 옆 대각선 순으로 하나의 스텝으로 가져가면 된다.  

import java.util.Arrays;

public class Solution {
    public int[] solution(int n) {
          int[][] arr = new int[n][n];
          int data = 1;
          int x=0,y=0;

          while(n > 0){
              // 아래
              for (int i = 0; i < n ; i++) {
                  arr[x++][y] = data++;
              }
              x--; // 증감이 한번 더 들어감
              y++; n--;

              //옆
              for (int i = 0; i < n; i++) {
                  arr[x][y++] = data++;
              }
              y--; // 증감
              x--; y--; n--;

              //대각
              for (int i = 0; i < n; i++) {
                  arr[x--][y--] = data++;
              }
              x++; y++; // 증감
              x++; n--; // 다음시작;
          }
          int[] res = new int[data-1];
          int level = 0;
          int idx = 0;
          for (int i = 0; i < arr.length; i++) {
              for (int j = 0; j <= level; j++) {
                  res[idx++] = arr[i][j];
             }
            level++;
        }
          return res;
    }


    public static void main(String[] args) {
        System.out.println(Arrays.toString(new Solution().solution(5)));
    }
}
반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기