본문 바로가기

프로그래머스/기타

삼각 달팽이

728x90

문제 설명

 

정수 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]

 

 

#include <string>
#include <vector>
#include <iostream>
using namespace std;

vector<int> solution(int n) {
    vector<int> answer;
    int arr [n+2][n+2];
    int total =0;
    int temp = n;
    while(temp!=0){
        total+=temp;
        temp--;
    }

    
    int startx=1;
    int starty=1;
    int endx = n;
    int endy = n;
    int num =1;
    int p=0;
    while(num<=total){


    for(int i=startx; i<=endx; i++){
        arr[i][starty]=num;
        num++;
     }
    
    for(int j=starty+1; j<=(endy-1); j++){
        arr[endx][j] =num;
        num++;
    }
        
    for (int i = endx; i>=startx+1; i--){
        arr[i][i-p]= num;
        num++;
    }
     startx+=2;
     starty=startx/2+1;
     endx = endx-1;
     endy -=2;
     p++;

    }
    
   for(int i=1; i<=n; i++){
        for(int j=1; j<=i; j++){
            
            answer.push_back(arr[i][j]);
            //cout<<arr[i][j]<<" ";
        }
    }
    
    
       
    return answer;
}

어떤 알고리즘? 

 

반복문을 통해 푼 문제이다. 반복되는 규칙을 찾으면 쉽게 풀 수 있다.

 

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

N개의 최소공배수  (0) 2021.01.19
이진 변환 반복하기  (0) 2021.01.13
영어 끝말잇기  (0) 2021.01.07
멀쩡한 사각형  (0) 2020.12.28
124 나라의 숫자  (0) 2020.12.23