https://school.programmers.co.kr/learn/courses/30/lessons/68645
풀이
n x n 크기의 2차원 배열을 생성하여, 우하향 대각선 기준으로 아랫부분만 번호를 채운다.
int lastNum: 마지막 번호
int[][] arr: 번호를 저장할 2차원 배열
int sequence = 1 -> lastNum
int[] dr, int[] dc
int dir = 0, 1, 2
int r, c: 현재 위치의 행, 열 번호
로직
while(탈출조건 => sequence == lastNum)
1. 현 방향으로 이동
2-1. 인덱스 안이면서 빈 칸이면 arr[][] = ++sequence
2-2. 인덱스 밖이거나 빈 칸이 아니면 dir++
코드
class Solution {
public int[] solution(int n) {
int lastNum = (n+1)*n/2;
int[][] arr = new int[n][n];
int sequence = 1;
int[] dr = {1, 0, -1};
int[] dc = {0, 1, -1};
int dir = 0;
int r = 0;
int c = 0;
arr[r][c] = sequence;
while (sequence < lastNum) {
int nr = r + dr[dir];
int nc = c + dc[dir];
if (nr >= 0 && nr < n && nc >= 0 && nc < n && arr[nr][nc] == 0) {
arr[nr][nc] = ++sequence;
r = nr;
c = nc;
}
else {
dir = (dir+1) % 3;
}
}
int[] answer = new int[lastNum];
int idx = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
answer[idx++] = arr[i][j];
}
}
return answer;
}
}
728x90
'Algorithm 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.2 : [3차] 압축 - 자바[Java] (0) | 2024.02.18 |
---|---|
[프로그래머스] Lv.2 : [3차] n진수 게임 - 자바[Java] (1) | 2024.02.18 |
[프로그래머스] Lv.2 : 다리를 지나는 트럭 - 자바[Java] (0) | 2024.02.15 |
[프로그래머스] Lv.2 : [3차] 방금 그 곡 - 자바[Java] (0) | 2023.10.12 |
[프로그래머스] Lv.2 : [3차] 파일명 정렬 - 자바[Java] (0) | 2023.10.12 |