[프로그래머스] Level.2 월간코드챌린지 시즌 1-삼각 달팽이
2021. 1. 12. 17:20ㆍAlgorithm/프로그래머스
코딩테스트 연습 - 삼각 달팽이
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
달팽이 배열은 밑으로 이동, 옆으로이동, 대각선으로 이동으로 3가지로 구분된다.
방향을 바꿀때마다 반복되는 횟수 (이동하는 횟수)가 1씩 줄어드는 것을 이용하여 풀었다.
처음에는 이 규칙을 찾지못해 위치를 일일이 변수에 넣어가며 풀었는데 풀수록 소스코드가 너무
길어지는 것 같아 다시 풀기를 반복했다 ㅠㅠㅠㅠㅠㅠ다른 사람들의 풀이도 한번 봐야겠다
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int n) {
vector<int> answer;
vector<vector<int>>v;
v.assign(n, vector<int>(n, 0));
int i = -1, j = 0;
int num = 0;
int repeat = n;
while (1) {
for (int k = 0;k < repeat;k++) {
i++;
v[i][j] = ++num;
}
if (repeat == 0)break;
else repeat--;
for (int k = 0;k < repeat;k++) {
j++;
v[i][j] = ++num;
}
if (repeat == 0)break;
else repeat--;
for (int k = 0;k < repeat;k++) {
i--, j--;
v[i][j] = ++num;
}
if (repeat == 0)break;
else repeat--;
}
for (int i= 0;i < n;i++) {
for (int j = 0;j <= i;j++) {
answer.push_back(v[i][j]);
}
}
return answer;
}
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Level.2 연습문제-최댓값과 최솟값 (0) | 2021.01.12 |
---|---|
[프로그래머스] Level.2 연습문제- 다음 큰 숫자 (0) | 2021.01.12 |
[프로그래머스]Level.2 String,Date- 루시와 엘라찾기 (0) | 2021.01.12 |
[프로그래머스]Level.2 GROUP BY -입양 시각 구하기(1) (0) | 2021.01.12 |
[프로그래머스]Level.2 스택/큐-주식가격 (0) | 2021.01.11 |