알고리즘 공부/프로그래머스

(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;
    }
}