본문 바로가기

c++/프로그래머스

프로그래머스 : 삼각 달팽이 level 2 C++

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

 

풀이

1. 밖에서부터 안으로 채워가는 순서를 얌전히 따랐다

2. n의 크기, 밖에서부터 몇번째 겹인지, 젤 위 꼭지점의 index 이렇게 3개를 관리

3. while문 써서 입력쓰

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int n) {
    vector<int> answer;
    vector<vector<int> > v(n+1);//1~n까지 쓰게
    int index=0;//몇번째 겹
    int start=1; // 꼭대기점
    int k=1;//실제 삽입
    int new_n =n;
    while(true)
    {
        if(new_n<=0)
            break;
        for(int i=0;i<new_n;i++)
            v[start+i].insert(v[start+i].begin()+index,k++);//왼쪾
        
        for(int i=0;i<new_n-1;i++)
        {
            v[n-index].insert(v[n-index].begin()+index+i+1,k++);//바닥
        }
        for(int i= new_n-2;i>0;i--)//오른쪽
        {
            v[start+i].insert(v[start+i].end()-index ,k++);
        }
        
        
        index++;
        start +=2;
        new_n = new_n-3;
    }
    for(int i=1;i<=n;i++)
    {
        for(int k=0;k<v[i].size();k++)
            answer.push_back(v[i][k]);
    }
    
    
    return answer;
}