다희의 코딩 성장일기

[프로그래머스] level2. 삼각 달팽이 (자바 JAVA) 본문

Algorithm/프로그래머스

[프로그래머스] level2. 삼각 달팽이 (자바 JAVA)

ilmiodiario 2021. 8. 29. 21:26

[ 문제 ]  [프로그래머스] level2. 삼각 달팽이 (자바 JAVA)

 

문제 링크 : 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


# 접근 방법 및 풀이 

 

  • 문제 그대로 구현해서 풀면되는데 난 이차원 map[][]을 구현해서 풀었다.
  • map을 주어진 n 사이즈 크기만큼 map [n][n] 로 만든다.
  • 문제 예시대로 n = 4 일 경우, map에 표시하면 다음과 같은 삼각형이 만들어진다.
  • 1      
    2 9    
    3 10 8  
    4 5 6 7
  • 문제에선 그림이 피라미드 형태지만 나는 map[][]안에서 구현하므로 저 모양으로 생각하고 만들었다.
  • 숫자 1부터 쭉 순서대로 map에 표시하면 된다. 이때 표시할 순서는 ↓, →, ↖ 순서대로 진행되고 반복된다.
  • 1      
    2 9    
    3 10 8  
    4 5 6 7
  • 여기서 화살표의 갯수가 4 -> 3 -> 2 -> 1개로 n부터 한 개씩 줄어드는 것을 볼 수 있다.
  • 따라서 while문으로 n != 0이 아닐 때 까지 반복해주고 n을 하나씩 줄인다.
  • while문 안에 for문으로 for(int i = 0; i < n; i++) 줄어드는 n번만큼 표시를 해주는데 방향에 따라 분기를 나누어주었다.
  • 방향 d는 ↓(d = 0), → (d = 1), ↖ (d = 2)
  • 자세한건 코드 참조! 삼각형을 어떤 순서대로 살펴볼지만 알면 쉬운 문제

# 주의할 점 

 

  • r이 왜 -1부터 시작하는지 생각해볼 것!

 

JAVA 코드
import java.util.*;
class Solution {
    public  List<Integer> solution(int n) {
        int map[][] = new int[n][n];
        int r = -1, c = 0;
        int d = 0;
        int num = 1;
        while(n!=0){
            for(int i = 0; i < n; i++){
                if(d == 0){
                    map[r+1][c] = num;
                    r++;
                }
                if(d == 1){
                    map[r][c+1] = num;
                    c++;
                }
                if(d == 2){
                    map[r-1][c-1] = num;
                    r--;
                    c--;
                }
                num++;
            }
            n--;
            d = (d+1)%3;
        }
        List<Integer> list = new ArrayList<>();
        for(int i = 0; i < map.length; i++){
            for(int j = 0; j < map.length; j++){
                if(map[i][j] == 0)
                    break;
                list.add(map[i][j]);
            }
        }
        return list;
    }
}

 

 

 

REVIEW

Comments