문제 :
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;
}
'전공공부 > 코딩테스트' 카테고리의 다른 글
(c++) 프로그래머스 "[1차] 캐시" (0) | 2022.04.12 |
---|---|
(c++) 프로그래머스 "스킬트리" (0) | 2022.04.12 |
(c++) 프로그래머스 "영어 끝말잇기" (0) | 2022.04.10 |
(c++) 프로그래머스 "예상 대진표" (0) | 2022.04.10 |
(c++) 프로그래머스 "리틀 프렌즈" (0) | 2022.03.28 |