본문 바로가기
코딩 테스트

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

by zoodi 2021. 3. 17.
728x90

 

🍒문제

삼각달팽이 : 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. 왼쪽 위 대각선 이동

 

위 3가지 이동방향에따라 2차원 배열로 처리를 해준다. 이후 2차원 배열에 있는 값을 1차원 answer 벡터에 차례로 담아주면 끝! 간단하게 생각하는 습관 기르기 !!

 

🍒코드

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int n) {
    vector<int> answer;
    int num = 1, y=0, x=0, dir=0; //입력 숫자, 행, 열, 방향
    int arr[1001][1001] = {0};
    
    for(int i=0; i<n; i++){
        switch(dir){
            //아래로 이동
            case 0:
                for(int j=i; j<n; j++){
                    arr[y++][x] = num++;
                }
                y-=1;
                x+=1;
                dir = 1;
                break;
            //오른쪽 이동
            case 1:
                for(int j=i; j<n; j++){
                    arr[y][x++] = num++;
                }
                y-=1;
                x-=2;
                dir = 2;
                break;
            //왼쪽 대각선 위로 이동
            case 2:
                for(int j=i; j<n; j++){
                    arr[y--][x--] = num++;
                }
                y+=2;
                x+=1;
                dir = 0;
                break;
        }
    }
    for(int i=0; i<n; i++){
        for(int j=0; j<=i; j++){
            answer.push_back(arr[i][j]);
        }
    }
    return answer;
}

 

728x90

댓글