반응형
Notice
Recent Posts
Recent Comments
Link
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

욱꾸미의 주꾸미 발

[코딩테스트] 프로그래머스 - 삼각 달팽이(Java, Level2) 본문

코딩테스트/프로그래머스

[코딩테스트] 프로그래머스 - 삼각 달팽이(Java, Level2)

욱꾸미 2022. 12. 10. 00:50
반응형

안녕하세요~ 오늘 풀어본 문제는 삼각 달팽이 입니다.

저번에는 네모모양으로 비슷한 문제를 풀어본거같은데

이번에는 나름 비교적 쉽게 풀었습니다.

Level2지만 그래도 어제 안풀리고 오늘은 풀려서 기분이 좋네요~

 

바로 문제 만나보시겠습니다.

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

 

프로그래머스

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

programmers.co.kr

다음은 제가 작성한 코드입니다.

class Solution {
    public int[] solution(int n) {
        
        int[] answer = new int[(n*(n+1))/2];
        int[][] square=new int[n][n];
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
                square[i][j]=0;
        }
        
        int x=-1;
        int y=0;
        // 탐색위치를 정하는 수
        int loop=0;
        // 지정할 번호를 정하는 수
        int number=1;
        for(int i=n;i>0;i--)
        {
            loop++;
            //loop%3==1이면 아래로
            if(loop%3==1)
            {
                x++;
                for(int j=0;j<i;j++)
                {
                    // 밑으로내려가니깐 x값 증가
                    square[x][y]=number;
                    number++;
                    x++;
                }
                x--;
            }
            //loop%3==2이면 오른쪽
            else if(loop%3==2)
            {
                y++;
                for(int j=0;j<i;j++)
                {
                    square[x][y]=number;
                    number++;
                    y++;
                }
                y--;
            }
            //loop%3==0이면 위
            else if(loop%3==0)
            {
                y--;
                x--;
                for(int j=0;j<i;j++)
                {
                    square[x][y]=number;
                    number++;
                    y--;
                    x--;
                }
                y++;
                x++;
            }
        }
        int pos=0;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(square[i][j]>0)
                {
                    answer[pos]=square[i][j];
                    pos++;
                }
            }
        }
        return answer;
    }
}

첫 번째 줄부터 하나씩 읽어나가 보겠습니다.

① 먼저 answer의 사이즈를 저장하는 부분입니다. 이건 n~1까지의 합 n*(n+1)/2라는 공식을 이용해서 정했습니다.

② 다음은 위치를 지정해 숫자를 넣어줄 array를 만들겠습니다. n*n의 배열공간을 만들어 0으로 초기화 하겠습니다.

③ 다음은 이제 반복문입니다.

    - n이 4인경우를 예시로 설명하겠습니다.

어떠신가요 그림을 보면 이해가 되실까요?

 

제가 생각한 규칙입니다.

1) n만큼 반복한다.

2) loop의 규칙

    - loop의 나머지가 0이면 x값만 증가하는 부분(loop 0, 3) 

    - loop의 나머지가 1이면 y값만 증가하는 부분(loop 1)

    - loop의 나머지가 2이면 x값 y값 각 1씩 감소하는 부분(loop 2)

3) number같은 경우는 신경쓸필요없이 시작값 1을 설정후 계속 +1씩 설정해 주면 됩니다.

4) 한 가지 주의할 점은 두 번째 반복문에서 x++, y++ x-- y-- 으로 인해 값이 1씩 적거나 커지기에 정리하는 과정이 필요합니다.

 

오늘 알아볼 문제의 설명은 여기서 마무리하겠습니다.

 

감사합니다:D

 

반응형