본문 바로가기
알고리즘/프로그래머스

[프로그래머스] 삼각 달팽이 c++

by 오오오니 2023. 2. 5.

 

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

 

프로그래머스

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

programmers.co.kr

 

배열을 1차원으로 하려고 하니까 너무 복잡해서 오래걸렸다.

결국 검색하고 2차원으로 했다 ^^

꺽어지는 순간이 n 번 있기 때문에 i=0부터 n까지 반복하고

왼쪽으로 내려가는 것을  mode : 0
왼쪽에서 오른쪽으로  것을  mode : 1
오른쪽으로 내려가는 것을 mode : 2라고 했다.

mode가 0일때는 y의 좌표가 커지고 1일때는 x의 좌표가 커지고 2일때는 y,x의 좌표가 작아진다.
그리고 반복문이 끝나고 나서는 다음 시작위치로  y,x를 바꿔준다.


#include <string>
#include <vector>

using namespace std;

int snail[1002][1002];
vector<int> solution(int n) {
    vector<int> answer;
    int mode=0;
    int x=0,y=0;
    int num=1;
    for(int i=0;i<n;i++)
    {
        if(mode==0)//좌하향
        {
            for(int j=i;j<n;j++)
                snail[y++][x]=num++;
            y--;
            x++;
            mode=1;
        }
        else if(mode==1)//좌->우
        {
            for(int j=i;j<n;j++)
                snail[y][x++]=num++;
            x-=2;
            y--;
            mode=2;
        }
        else
        {
            for(int j=i;j<n;j++)
                snail[y--][x--]=num++;
            y+=2;
            x++;
            mode=0;
        }
    }
    for(int i=0;i<n;i++)
        for(int j=0;j<=i;j++)
            answer.push_back(snail[i][j]);
    return answer;
}