728x90
반응형
1. 문제 핵심 요약
주어진 정수 n
에 대해,
- 밑변과 높이가 n인 삼각형을 생각하고,
- 맨 위 꼭짓점부터 반시계 방향으로 달팽이처럼 숫자를 채워나가야 합니다.
- 채운 결과를 첫 번째 행부터 순서대로 한 줄 배열로 합친 결과를 구하는 문제입니다.
예시
n 값 | 결과 배열 |
---|---|
4 | [1,2,9,3,10,8,4,5,6,7] |
5 | [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] |
2. 주의사항
- n은 최대 1000까지 주어질 수 있습니다. (
n=1000
이면 최대 1,000,000개의 숫자) - 삼각형 형태로 채워야 하므로
(i, j)
에서j <= i
인 영역만 사용해야 합니다. - 방향 전환은 3단계(아래→오른쪽→대각선 위 왼쪽)를 순서대로 반복합니다.
- 초기 위치 설정을 조심해야 합니다:
(0,0)
부터가 아니라(y=-1, x=0)
에서 시작해야 합니다. - 배열의 크기는
n x n
이지만 실제로는 삼각형 부분만 사용합니다. (0이 남아있을 수 있음)
3. 슈도코드
1. n x n 크기의 2차원 배열 result를 초기화한다.
2. 방향 이동을 위한 delta 배열 (dy, dx)을 준비한다.
- 아래로 이동: (dy=1, dx=0)
- 오른쪽으로 이동: (dy=0, dx=1)
- 대각선 위 왼쪽 이동: (dy=-1, dx=-1)
3. 시작 좌표를 (y=-1, x=0)으로 설정한다.
4. 이동할 길이 len을 n부터 1까지 감소시키며:
- 현재 방향(dir)로 len번 이동하면서 숫자(cnt)를 채워넣는다.
- 이동 후 dir = (dir + 1) % 3로 방향을 전환한다.
5. 2차원 배열 result를 순회하며 삼각형 영역에 있는 숫자들을 차례로 1차원 배열에 담는다.
6. 완성된 배열을 반환한다.
4. 코드 (자세한 주석 포함)
import java.util.*;
class Solution {
public int[] solution(int n) {
int[][] result = new int[n][n]; // 결과를 저장할 n x n 배열
int cnt = 0; // 채워넣을 숫자
// delta 배열: 방향 이동을 (y,x) 변화량으로 정의
int[] dy = {1, 0, -1}; // 아래 → 오른쪽 → 대각선 위 왼쪽
int[] dx = {0, 1, -1};
int y = -1; // 시작 위치 (y = -1, x = 0) 설정
int x = 0;
int dir = 0; // 현재 방향 (0: 아래, 1: 오른쪽, 2: 대각선 위 왼쪽)
// len은 이동해야 할 거리, n부터 1까지 감소
for (int len = n; len > 0; len--) {
for (int i = 0; i < len; i++) {
y += dy[dir]; // 방향에 따라 y 좌표 이동
x += dx[dir]; // 방향에 따라 x 좌표 이동
result[y][x] = ++cnt; // 현재 좌표에 숫자 채워넣기
}
dir = (dir + 1) % 3; // 방향을 반시계 방향으로 전환 (0→1→2→0 반복)
}
// 최종 결과를 저장할 배열
int[] answer = new int[cnt];
int index = 0;
// result 배열에서 삼각형 영역만 추출
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) { // 삼각형 영역은 j <= i
answer[index++] = result[i][j];
}
}
return answer;
}
}
✨ 주의 깊게 봐야 할 주석 포인트
delta 배열
사용해서 방향 전환을 깔끔히 관리했습니다.y=-1
부터 시작하는 이유는 첫 번째 이동이 y+1이기 때문입니다.- result 배열에서
(i,j)
는j <= i
까지만 유효합니다. - 방향은
(0: 아래) → (1: 오른쪽) → (2: 대각선 위 왼쪽)
순서로 반복합니다.
🔥 마무리
이 문제는 단순 구현이지만,
- 방향 제어,
- 삼각형 영역 추출,
- 배열 인덱스 관리
이 세 가지를 모두 신경써야 하므로 꼼꼼함이 중요합니다.
delta 배열을 잘 활용하면, 방향 전환을 쉽게 처리할 수 있어서 코드가 훨씬 깔끔해집니다!
728x90
반응형
'PCCP > 프로그래머스' 카테고리의 다른 글
[프로그래머스 JAVA] 교점에 별 만들기 (0) | 2025.04.27 |
---|