본문 바로가기
코딩테스트 공부/Programmers

[C++] level2 삼각달팽이 68645

by 메정 2021. 8. 22.

📌삼각달팽이

/* 해당 문제 설명은 링크로 대체한다. */

📌풀이

~

전에 알고리즘랩스 2주 교육 수강하면서 이렇게 배열을 다른 방향으로 채워나가는 문제를 풀어본 적이 있어서 어렵지 않게 해결할 수 있었다.

이런 문제의 경우 정삼각형보다는 직각삼각형으로 생각해두고
1)좌하향 2)우측 3)우상향 순서로 구현하는 방식을 생각하면 접근하는데 어렵지 않다.

📌코드

#include <string>
#include <vector>
#include <iostream>
using namespace std;

vector<int> solution(int n) {
    vector<int> answer;
    vector<vector<int>> numbers(n, vector<int>(n, 0)); //값을 채워 넣을 직각 삼각형
    int num = 1, x = -1, y = 0, p = n;

    //배열 채우기
    for (int i = 0; i < n; i++) {
        for (int j = p;j >= 1; j--) {
            if(i%3==0) { //좌하향
                numbers[++x][y] = num;
            } else if (i % 3 == 1) { //우측
                numbers[x][++y] = num;
            } else if (i % 3 == 2) { //우상향
                numbers[--x][--y] = num;
            }
            num++;
        }
        p--;
    }

    for(int i = 0; i < n; i++){
        for(int j = 0; j <= i; j++)
            answer.push_back(numbers[i][j]);
    }

    return answer;
}

댓글