본문 바로가기
Algorithm

[Algorithm]삼각달팽이(Java)

by NOHCODING 2023. 5. 24.
반응형

01. 문제내용

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

 

프로그래머스

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

programmers.co.kr

 

 

02. 문제풀이로 배운점

  • 삼각형에 집중해서 문제를 풀이하려고 하기보다 이중배열을 사용해서 문제를 접근하면 훨씬 빠르게 계산할 수 있음
  • 반복되는 것을 줄이는 것도 좋은 방법 중 하나!

03. 문제풀이 방법

class Solution {
    public int[] solution(int n) {
        int[][] triangle = new int[n][n];
        int v = 1;
        int x = 0;
        int y = 0;
        
        while(true){
            
            //아래쪽으로 이동!
            while(true){
                triangle[y][x] = v++;
                if(y + 1 == n || triangle[y+1][x] != 0) break;
                y += 1;
            }
            
            if(x + 1 == n || triangle[y][x+1] != 0) break;
            x += 1;
            
            //오른쪽으로 이동
            while(true){
                triangle[y][x] = v++;
                if(x + 1 == n || triangle[y][x+1] != 0) break;
                x += 1;
            }
            
            if(triangle[y - 1][x - 1] != 0) break;
            x -= 1;
            y -= 1;
            
            //왼쪽 위로 이동
            while(true){
                triangle[y][x] = v++;
                if(triangle[y-1][x -1] != 0) break;
                x -= 1;
                y -= 1;
            }
            
            if( y + 1 == n || triangle[y + 1][x] != 0) break;
            y += 1;
        }
        
        int[] result = new int[v-1];
        int index = 0;
        
        for(int i = 0; i < n; i++){
            for(int j = 0; j <= i; j++){
                result[index++] = triangle[i][j];
            }
        }
        
        
        return result;
    }
}
반응형

댓글