문제 링크
programmers.co.kr/learn/courses/30/lessons/68645
C++ 풀이
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int n) {
vector<int> answer;
vector <vector<int>> triangles(n);
for (int i = 0; i < n; i++)
triangles[i].resize(i + 1);
int startRow = 0; // 반시계 채우기를 시작할 층
int endRow = n - 1;
int startCol = 0;
int currentNum = 1;
while (1) { //반시계 방향으로 반복적으로 수 채우기
//왼쪽 하단으로 내려가면서 채우기 ↙
for (int i = startRow; i <= endRow; i++, currentNum++)
triangles[i][startCol] = currentNum;
// 아랫변 채우기 →
for (int i = startCol + 1; i < n - startRow; i++, currentNum++)
triangles[endRow][i] = currentNum;
//오른쪽 하단에서부터 올라가면서 채우기 ↖
for (int i = endRow - 1; i > startRow; i--, currentNum++)
triangles[i][triangles[i].size() - startCol - 1] = currentNum;
startRow += 2; // 다음 반시계 방향 채우기를 시작할 위치 갱신
if (startRow >= endRow) //갱신한 startRow가 이미 채워진 Row와 겹치면 종료
break;
endRow -= 1;
startCol += 1;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < triangles[i].size(); j++)
answer.push_back(triangles[i][j]);
}
return answer;
}
반응형
'알고리즘 · 코딩' 카테고리의 다른 글
[프로그래머스] 두 개 뽑아서 더하기 (0) | 2021.01.18 |
---|---|
[SWEA 9480] 민정이와 광직이의 알파벳 공부 (0) | 2021.01.14 |
[프로그래머스] 방금그곡 (0) | 2021.01.10 |
[SWEA 10200] 구독자 전쟁 (0) | 2021.01.08 |
[SWEA 10505] 소득 불균형 (0) | 2021.01.07 |