비버놀로지

[Programmers 프로그래머스] 68645 삼각 달팽이 (C/C++) 본문

ALGORITM/JAVA

[Programmers 프로그래머스] 68645 삼각 달팽이 (C/C++)

KUNDUZ 2021. 3. 28. 12:31
728x90

programmers.co.kr/learn/courses/30/lessons/68645

 

코딩테스트 연습 - 삼각 달팽이

5 [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] 6 [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11]

programmers.co.kr

문제 설명

정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.


제한사항

  • n은 1 이상 1,000 이하입니다.

입출력 예

 

n result
4 [1,2,9,3,10,8,4,5,6,7]
5 [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9]
6 [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11]

 

while과 for문을 이용을 해서 문제를 해결했다.

 

2차원 배열에 먼저 해당하는 값을 넣어주고, 결과를 answer에 담아 주었다.

 

3가지 방식으로 배열에 담아준다.

 

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int n)
{
    vector<int> answer;
    int arr[n][n];		//결과를 담아줄 배열
    int num = 0;
    for (size_t i = 1; i <= n; i++)		//최대값을 구해준다.
    {
        num += i;
    }
    int cnt = 0;
    int x1 = 0;		//x축 시작
    int y1 = 0;		//y축 시작
    int x2 = n;		//x축 마지막
    int y2 = n;		//y축 마지막
    int number = 1;	//배열에 넣어줄 값
    while (cnt < n)
    {

        for (size_t i = x1; i < x2; i++)	//세로방향으로 배열에 넣어준다.
        {
            arr[i][y1] = number++;
        }

        x1++;
        y1++;
        cnt++;
        if (cnt == n)
        {
            break;
        }
        for (size_t j = y1; j < y2; j++)	//가로방향으로 배열에 넣어준다.
        {
            arr[x2 - 1][j] = number++;
        }
        x2--;
        cnt++;
        y2--;
        if (cnt == n)
        {
            break;
        }
        int temp = y2 - 1;
        for (size_t i = x2 - 1; i >= x1; i--)	//대각선 위로 배열에 값을 넣어준다.
        {
            arr[i][temp--] = number++;
        }
        x1++;
        y2--;
        cnt++;
        if (cnt == n)
        {
            break;
        }
    }
    for (size_t i = 0; i < n; i++)
    {
        for (size_t j = 0; j <= i; j++)
        {
            answer.push_back(arr[i][j]);
        }
    }

    return answer;
}
728x90
Comments