📌삼각달팽이
/* 해당 문제 설명은 링크로 대체한다. */
📌풀이
예
~
전에 알고리즘랩스 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;
}
'코딩테스트 공부 > Programmers' 카테고리의 다른 글
[C++] 위클리챌린지 4주차 직업군 추천하기 84325 (0) | 2021.08.23 |
---|---|
[C++] level2 땅따먹기 12913 (0) | 2021.08.22 |
[C++] level2 후보키 42890 (0) | 2021.08.22 |
[C++] 위클리챌린지 2주차 83201 (0) | 2021.08.22 |
[C++] level2 순위 검색 67257 (0) | 2021.08.22 |
댓글