https://programmers.co.kr/learn/courses/30/lessons/68645?language=java
풀이
위 삼각형을 2차원 배열에 넣는다고 생각하자.
배열에 차례대로 넣는 동작을 살펴보면 3가지로 나눌 수 있다.
- 세로(아래)로 이동
- 가로(오른쪽)로 이동
- 대각선(왼쪽위)으로 이동
실제로 배열에 적용하며 확인하면 다음과 같다.
- 세로(아래)로 이동 : a[0][0]=1 -> a[1][0]=2 -> a[2][0]=3 같이 첫번째 인덱스 +1 증가
- 가로(오른쪽)로 이동 : [4][1]=6 -> [4][2]=9 -> [4][3]=8 -> [4][4]=9 와 같이 두번째 인덱스 +1 증가
- 대각선(왼쪽위)으로 이동 : 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 |