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

연성·2020년 11월 3일
0

코딩테스트

목록 보기
128/261

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

1. 문제

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

2. 제한 사항

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

3. 풀이

  • 방향을 바꿔주면서 arr 배열에 값을 저장하고 answer 배열에 순서에 맞게 저장했다.
  • dx와 dy를 이용하여 인덱스를 변경해주었고 direction 변수를 이용하여 dx와 dy의 인덱스를 조정했다.

4. 처음 코드와 달라진 점

  • while문에서 n-- 을 하여 0으로 만들어 놓고 대입하는 loop에서 n을 사용해서 loop가 돌지 않았다. n 값을 미리 따로 저장하도록 수정하였다.

5. 코드

#include <iostream>
#include <vector>

using namespace std;

int arr[1000][1000];
int dx[] = {1,0,-1};
int dy[] = {0,1,-1};
vector<int> solution(int n) {
    
    int x = -1, y = 0;
    int num = 1;
    int direction = 0;
    int n_copied = n;
    while(n>0){
        for(int i=0; i<n; i++){
            x += dx[direction%3];
            y += dy[direction%3];
            arr[x][y] = num++;
        }
        n--;
        direction++;
    }
    
    vector<int> answer;
    for(int i=0; i<n_copied; i++){
        for(int j=0; j<i+1; j++){
            answer.push_back(arr[i][j]);
        }
    }
    return answer;
}

0개의 댓글