나 JAVA 봐라

[프로그래머스] 삼각달팽이 본문

코딩테스트/구현

[프로그래머스] 삼각달팽이

cool_code 2024. 8. 13. 11:29

https://school.programmers.co.kr/learn/courses/30/lessons/68645

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제를 보고, 삼각형을 왼쪽으로 다 밀어버린 후에 배열로 접근하면 되겠다는 생각까지는 했다. 

하지만 이를 어떻게 삼각형으로 돌아서 탐색해야하나? 어떻게 구현해야하나? 를 두고 헤맴...

 

아래 링크에 있는 방법이, 나랑 접근 방식이 비슷해서 코드를 참고했다. 구현 코드를 이해하는데 한참 걸렸지만, 배열을 삼각형으로 뱅글뱅글 탐색을 어떻게 하는지 이해했다. 이를 응용하면 삼각형 뿐 아니라 사각형도 뱅글뱅글 탐색할 수 있을 것 같다.. 

 

https://minhamina.tistory.com/58

 

[프로그래머스 - Java] 삼각 달팽이(월간 코드 챌린지 시즌1)

문제 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 설명 * Jungol 1337 달팽이 삼각형

minhamina.tistory.com

 

class Solution {
    public int[] solution(int n) {
        
        int map[][]= new int[n][n];
        int result[] = new int[n*(n+1)/2];
        
        int x = -1;
        int 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--;
                }
                
                map[x][y] = num;
                num++;
            }
        }
        
        int index = 0;
        for (int i = 0; i < n; i++){
            for (int j = 0; j < i+1; j++){
                result[index] = map[i][j];
                index++;
            }
        }
        return result;
    }
}