알고리즘 공부/프로그래머스
(Java)프로그래머스 코딩테스트 연습 - 월간 코드 챌린지 시즌1 - 삼각 달팽이
HRuler
2020. 10. 19. 21:21
1. 문제
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
2. 나의 풀이
class Solution {
public int[] solution(int n) {
int max = getMax(n);
//System.out.println(max);
int[] answer = new int [max];
int [][] answer1 = new int [n][n];
for(int i = 0; i < answer1.length; i = i + 1) {
for(int j = 0; j <= i; j = j + 1) {
answer1[i][j] = -1;
}
}
/*
for(int [] imsi : answer1) {
System.out.println(Arrays.toString(imsi));
}
*/
int i = 0, j = 0, k = 1;
answer1[i][j] = k;
while(k < max) {
while(i + 1 < n && k < max && answer1[i+1][j] < 0) {
answer1[++i][j] = ++k;
}
while(j + 1 < n && k < max && answer1[i][j+1] < 0) {
answer1[i][++j] = ++k;
}
while(i - 1 > 0 && j - 1 > 0 && k < max && answer1[i-1][j-1] < 0) {
answer1[--i][--j] = ++k;
}
}
k = 0;
for(i = 0; i < answer1.length; i = i + 1) {
for(j = 0; j <= i; j = j + 1) {
answer[k] = answer1[i][j];
k++;
}
}
return answer;
}
int getMax(int n) {
int imsi = 0;
for(int i = 1; i <= n; i = i + 1) {
imsi += i;
}
return imsi;
}
}
3. 다른 사람 풀이
class Solution {
public int[] solution(int n) {
int[] answer = new int[(n*(n+1))/2];
int[][] matrix = new int[n][n];
int x = -1, y = 0;
int num = 1;
for (int i = 0; i < n; ++i) {
for (int j = i; j < n; ++j) {
if (i % 3 == 0) {
++x;
} else if (i % 3 == 1) {
++y;
} else if (i % 3 == 2) {
--x;
--y;
}
matrix[x][y] = num++;
}
}
int k = 0;
for(int i = 0; i < n; ++i) {
for(int j = 0; j < n; ++j) {
if(matrix[i][j] == 0) break;
answer[k++] = matrix[i][j];
}
}
return answer;
}
}