관리 메뉴

Tree's 개발일기

삼각달팽이 본문

문제풀이/프로그래머스

삼각달팽이

tree0123 2023. 7. 16. 10:07
728x90

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

 

프로그래머스

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

programmers.co.kr

구현문제였다.

다만, 주의할 건, 아래, 오른쪽, 위를 돌고 난 후

1) 인덱스가 넘치지 않도록 조정해주고,

2) 다음인덱스의 시작점을 위해 조정해주는 작업이 필요했는데

여기서 각 방향별 행열 조건을 잘 봐야한다. 

* 예시를 보면서 직접 행령의 인덱스를 보는게 구현하기에 좋다.

 

나는 위쪽이동 후 x++조건을 하나 놓쳐서 고생했다..

class Solution {
    public int[] solution(int n) {
        if (n==1) {return new int []{1};}
        int [][] mapp = new int[n][n];
        int sum =(n*(n+1))/2;
        int idx = 1;
        int x =0;
        int y=0; 
        int turn =n;
        while (idx<=sum) {
            //아래
            for (int i=0; i<turn; i++) {
                mapp[x++][y]=idx++;
            }
            x--;
            turn--;
            y++;
            
            // 오른쪽
            for (int j=0; j<turn; j++) {
                mapp[x][y++]=idx++;
            }
            y--; //열 안넘치게
            turn--;
            x--; //다음 차례 준비
            y--;
            
            //위쪽
            for (int j=0; j<turn; j++) {
                mapp[x--][y--]=idx++;
            }
            x++;
            turn--;
            x++;
            y++;
        }
        
        int n_idx = 0;
        int[] answer = new int[sum];
        
        for (int i=0; i<n; i++) {
            for (int j=0; j<n; j++) {
                if (mapp[i][j]!=0) {
                    answer[n_idx]=mapp[i][j];
                    n_idx++;
                }
            }
        }
        
        return answer;
    }
}

 

다른 풀이를 보니, i%3의 나머지로 방향을 판단했고, j로 한방향에 몇개씩 넣을건지 정했다. 

변수와 절차를 줄여서 간단하게 풀었다.. 

class Solution {
    public int[] solution(int n) {
        if (n==1) {return new int []{1};}
        int [][] mapp = new int[n][n];
        int sum =(n*(n+1))/2;
        int idx = 1;
        int x = -1;
        int y=0; 
        
        for(int i=0; i<n; i++) { //방향 여부(3가지 방향)
            for(int j=i; j<n; j++) { // turn 
                if(i%3==0){
                    x++;
                }
                else if(i%3==1){
                    y++;
                }
                else {
                    x--;
                    y--;
                }
                mapp[x][y]=idx++;
            }
        }
        
        int n_idx = 0;
        int[] answer = new int[sum];
        
        for (int i=0; i<n; i++) {
            for (int j=0; j<n; j++) {
                if (mapp[i][j]!=0) {
                    answer[n_idx]=mapp[i][j];
                    n_idx++;
                }
            }
        }
        
        return answer;
    }
}
728x90

'문제풀이 > 프로그래머스' 카테고리의 다른 글

미로 탈출  (0) 2023.07.20
[자바]신고 결과 받기  (0) 2023.07.17
햄버거 만들기  (0) 2023.07.13
숫자 문자열과 영단어  (0) 2023.07.11
[3차] n진수 게임  (0) 2023.07.06
Comments