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

(c++) 프로그래머스 "삼각 달팽이"

by 시아나 2022. 4. 12.

문제 : 

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


나의 풀이:

#include <string>
#include <vector>
#include <iostream>

using namespace std;
vector<vector<int>> result;

int draw(int n, pair<int, int> start, pair<int, int> end) {
    for (int i = start.first; i <= end.first; i++) {
        result[i][start.second] = n++;
    }
    for (int i = start.second + 1; i <= end.second; i++) {
        result[end.first][i] = n++;
    }
    int height = end.first - 1;
    for (int i = end.second - 1; i > start.second; i--, height--) {
        result[height][i] = n++;
    }
    return n;
}

vector<int> solution(int n) {
    vector<int> answer;
    for (int i = 1; i <= n; i++) {
        vector<int> tmp;
        for (int k = 0; k < i; k++) {
            tmp.push_back(0);
        }
        result.push_back(tmp);
    }
    pair<int, int> start, end;
    int num = 1;
    start = { 0,0 }; end = { n - 1,n - 1 };
    while (start <= end) {
        if (start == end) {
            result[start.first][start.second] = num;
            break;
        }
        num = draw(num, start, end);
        start.first += 2; start.second += 1;
        end.first -= 1; end.second -= 2;
    }

    for (int i = 0; i < n; i++) {
        for (int k = 0; k <= i; k++) {
            answer.push_back(result[i][k]);
        }
    }
    return answer;
}