어흥

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

알고리즘/프로그래머스

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

라이언납시오 2021. 9. 29. 18:15
728x90
반응형

문제 링크: https://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. 구현

- 삼각달팽이가 하삼각행렬이라고 생각한다

- 아래,오른쪽,왼쪽위 대각선 총 3개의 방향을 규칙적으로 움직인다 → dx,dy를 통해 나타낸다

- 각 방향으로 움직이는 정도가 n-1, n-2, n-3, ...., 1, 0 만큼 움직이므로 이를 While문을 통해 구현

#include <string>
#include <vector>
#include <iostream>
using namespace std;
int arr[1000][1000];
int dx[3] = {0,1,-1};
int dy[3] = {1,0,-1};

vector<int> solution(int n) {
    vector<int> answer;
    int x=0,y=0,idx=1,dir=0,num=n;
    while(n){
        arr[y][x]=idx++;
        for(int i=0;i<n-1;i++){
            y+=dy[dir];
            x+=dx[dir];
            arr[y][x]=idx++;
        }
        dir = (dir+1)%3;
        y+=dy[dir];
        x+=dx[dir];
        n--;
    }
    for(int i=0;i<num;i++)
        for(int j=0;j<=i;j++)
            answer.push_back(arr[i][j]);
    return answer;
}
728x90
반응형
Comments