https://programmers.co.kr/learn/courses/30/lessons/68645
삼각형을 일단 왼쪽으로 밀어서 직각 삼각형을 만들어주면 풀기 쉬워진다. 아래 이미지처럼
1. 왼쪽 위에서 아래로
2. 왼쪽 아래에서 오른쪽 아래로
3. 오른쪽 아래에서 대각선 위로
앞선 3개의 반복으로 값을 채워가면 된다.
// 프로그래머스 삼각 달팽이 문제
class Solution {
public int[] solution(int n) {
int max = n * (n + 1) / 2;
int[][] matrix = new int[n][n];
int[] answer = new int[max];
// 시작 지점 초기화
int x = 0, y = 0;
int value = 1;
matrix[0][0] = 1;
while (value < max) {
// 왼쪽 - 위에서 아래로
while (x + 1 < n && matrix[x + 1][y] == 0) {
matrix[++x][y] = ++value;
}
// 아래 - 왼쪽에서 오른쪽으로
while (y + 1 < n && matrix[x][y + 1] == 0) {
matrix[x][++y] = ++value;
}
// 오른쪽 아래에서 대각선 위로
while (y - 1 > 0 && x - 1 > 0 && matrix[x - 1][y - 1] == 0) {
matrix[--x][--y] = ++value;
}
}
int idx = 0;
for(int i = 0; i < matrix.length; i++) {
for (int j = 0; j <= i; j++) {
answer[idx] = matrix[i][j];
idx++;
}
}
return answer;
}
}
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 숫자의 표현 문제 (자바) (0) | 2021.06.01 |
---|---|
프로그래머스 - 2개 이하로 다른 비트 문제 (자바) (0) | 2021.06.01 |
프로그래머스 - 예상 대진표 문제 (자바) (0) | 2021.05.31 |
프로그래머스 - 방금그곡 문제 (자바) (0) | 2021.05.08 |
프로그래머스 - 비밀지도 문제 (자바) (0) | 2021.05.07 |