Scroll indicator done
728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


조건 

1. n
1이상 1000이하

4 → 1 + 2 + 3 + 4 = 10 까지의 수
5 → 1 + 2 + 3 + 4 + 5 = 15 까지의 수

 

n = 6 일 때, 삼각 달팽이 형태

1,1 → 2,1 → 3,1 → 4,1 → 5,1 → 6,1
6,2 → 6,3 → 6,4 → 6,5 → 6,6
5,5 → 4,4 → 3,3 → 2,2
3,2 → 4,2 → 5,2
5,3 → 5,4
4,3

알고리즘
  • while, index 문제
  • 이미 채워져 있다면? break
  1. 아래 → 옆 : y → y+1
  2. 옆 → 위 : x → x-1, y → y-1
  3. 위 → 아래 : x → x+1

아래로, 옆으로, 대각선으로 채워넣기

 

  1. 최대 숫자 MaxNum 구하기
  2. 넣을 숫자를 뜻하는 num, 좌표 탐색할 x, y 선언
  3. 무한 루프 안에서,
    1. if) maxNum 과 num 이 같으면 break. 숫자를 다 넣었다는 뜻
    2. while) 아래 좌표(y+1)가 n보다 작을 때 아래 좌표(y+1) 자리가 0이 아니면, 숫자가 채워져 있으면 break
      arr[++y][x] = ++num;
    3. while) 옆 좌표(x+1)가 n보다 작을 때 옆 좌표(x+1) 자리가 0이 아니면, 숫자가 채워져 있으면 break
      arr[y][++x] = ++num;
    4. while) 대각선 좌표(x-1, y-1)가 n보다 작을 때 대각선 좌표(x-1, y-1) 자리가 0이 아니면, 숫자가 채워져 있으면 break
      arr[--y][--x] = ++num;
  4. result 형식으로 arr 배열 값 저장하기

package com.example.javaproject3.psstudy;

public class Solution68645 {
    public int[] solution(int n) {
        int maxNum = 0;
        for (int i = 1; i <= n; i++)
            maxNum += i;

        int[] answer = new int[maxNum];
        int[][] arr = new int[n + 1][n + 1];
        int num = 1, x = 0, y = 0;
        arr[0][0] = 1;

        while (true) {
            if (num == maxNum) break;

            while (y + 1 < n) {
                if (arr[y + 1][x] != 0) break;
                arr[++y][x] = ++num;
            }

            while (x + 1 < n) {
                if (arr[y][x + 1] != 0) break;
                arr[y][++x] = ++num;
            }

            while (y - 1 > 0 && x - 1 > 0) {
                if (arr[y - 1][x - 1] != 0) break;
                arr[--y][--x] = ++num;
            }
        }

        int idx = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j <= i; j++) {
                answer[idx] = arr[i][j];
                idx++;
            }
        }

        return answer;
    }

    public static void main(String[] args) {
        Solution68645 s = new Solution68645();
        int[] arr = s.solution(6);

        for (int a : arr) {
            System.out.printf("%d ", a);
        }
    }
}

 

728x90