ygreenb
yellowgreenblue
ygreenb
전체 방문자
오늘
어제
  • TIL (130)
    • Algorithm & Data Structure (70)
      • 이론 (4)
      • 프로그래머스 (54)
      • 백준 (12)
    • JAVA (4)
    • Android Studio (9)
    • Database (1)
    • WEB (25)
      • HTML+CSS (7)
      • Javascript (5)
      • React (11)
      • Django (1)
      • Node.js (1)
    • Computer Vision (13)
    • Git (8)

블로그 메뉴

  • HOME
  • TAG
  • GITHUB

공지사항

인기 글

태그

  • Queue
  • BFS
  • PriorityQueue
  • 백준
  • stack
  • 안드로이드
  • 코틀린
  • git
  • reactjs
  • entrySet
  • 깃허브
  • Arrays.sort()
  • sort
  • getOrDefault
  • 해시
  • Comparator
  • kotiln
  • java
  • 프로그래머스 Lv.2
  • git bash
  • 깃
  • compareTo()
  • DP
  • React
  • 프로그래머스
  • 스택/큐
  • HashMap
  • greedy
  • dfs
  • Android

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ygreenb

yellowgreenblue

[Java] 프로그래머스 Lv2 > 삼각 달팽이
Algorithm & Data Structure/프로그래머스

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

2022. 3. 6. 14:44

https://programmers.co.kr/learn/courses/30/lessons/68645?language=java 

 

코딩테스트 연습 - 삼각 달팽이

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

 

풀이

위 삼각형을 2차원 배열에 넣는다고 생각하자.

배열에 차례대로 넣는 동작을 살펴보면 3가지로 나눌 수 있다.

  1. 세로(아래)로 이동
  2. 가로(오른쪽)로 이동
  3. 대각선(왼쪽위)으로 이동

실제로 배열에 적용하며 확인하면 다음과 같다.

  1. 세로(아래)로 이동 : a[0][0]=1 -> a[1][0]=2 -> a[2][0]=3 같이 첫번째 인덱스 +1 증가
  2. 가로(오른쪽)로 이동 : [4][1]=6 -> [4][2]=9 -> [4][3]=8 -> [4][4]=9 와 같이 두번째 인덱스 +1 증가
  3. 대각선(왼쪽위)으로 이동 : a[4][4] -> a[3][3]=10 -> a[2][2]=11 -> a[1][1]=10 와 같이 두 인덱스가 -1씩 이동 

각 동작마다 행해지는 숫자가 1개씩 줄어든다. (j)
(세로 5번 : 1~5 -> 가로 4번 : 6~9 -> 대각선 3번 : 10~12 -> 다시 세로 2번 : 13~14 -> 가로 1번 : 15)

동작은 3개이므로 3을 나눠서 나머지로 구분해 동작을 실행해준다.

마지막으로 2차원 배열을 1차원배열에 넣어서 반환한다.

class Solution {
    public int[] solution(int n) {
        int max = n*(n+1)/2; //등비수열합
        int[][] arr = new int[n][n];
        int[] answer = new int[max];

        // 시작 지점
        int x = -1, 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;
                }
                arr[x][y] = num++;
            }
        }

        int idx=0;
        for(int i=0; i<arr.length; i++){
            for(int j=0; j<=i;j++){
                answer[idx] = arr[i][j];
                idx++;
            }
        }

        return answer;
    }
}

 

 

저작자표시 (새창열림)

'Algorithm & Data Structure > 프로그래머스' 카테고리의 다른 글

[Java] 프로그래머스 Lv.2 : 위장  (0) 2022.03.09
[Java] 프로그래머스 Lv.2 > 조이스틱  (0) 2022.03.06
[Java] 프로그래머스 Lv.2 > 전화번호 목록  (0) 2022.03.04
[Java] 프로그래머스 Lv.2 > 124 나라의 숫자  (0) 2022.03.04
[Java] 프로그래머스 Lv.2 > 멀쩡한 사각형  (0) 2022.02.28
    'Algorithm & Data Structure/프로그래머스' 카테고리의 다른 글
    • [Java] 프로그래머스 Lv.2 : 위장
    • [Java] 프로그래머스 Lv.2 > 조이스틱
    • [Java] 프로그래머스 Lv.2 > 전화번호 목록
    • [Java] 프로그래머스 Lv.2 > 124 나라의 숫자
    ygreenb
    ygreenb
    개발공부기록장

    티스토리툴바