문제 : https://school.programmers.co.kr/learn/courses/30/lessons/68645
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 풀이
| 1 | 0 | 0 | 0 |
| 2 | 9 | 0 | 0 |
| 3 | 10 | 8 | 0 |
| 4 | 5 | 6 | 7 |
( 예시) n=4인 경우 )
- 예시와 같이, 코딩에 맞게 삼각형의 구조를 바꾸고 [2차원 배열] + [델타 배열]로 구현하면 됨
작성한 코드 (정답)
class Solution {
public int[] solution(int n) {
int blockSize = n*(n+1)/2;
int[] answerArray = new int[blockSize];
int[][] block = new int[n][n];
int curX = 0;
int curY = 0;
// 방향 (아래, 오른쪽, 왼쪽 위)
int d = 0;
int[] dx = {0, 1, -1};
int[] dy = {1, 0, -1};
for(int i = 1; i <= blockSize; i++) {
block[curX][curY] = i;
// 다음으로 이동 할 좌표 확인
int nextX = curX + dx[d];
int nextY = curY + dy[d];
// 방향 바꿈 체크
if (nextX >= n || nextY >= n || nextX < 0 || nextY < 0 || block[nextX][nextY] != 0) {
d = (d+1) % 3;
nextX = curX + dx[d];
nextY = curY + dy[d];
}
curX = nextX;
curY = nextY;
}
// 정답 배열 작성
int count = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (block[j][i] == 0) continue;
answerArray[count] = block[j][i];
count++;
}
}
return answerArray;
}
}
참고 : https://record47584.tistory.com/36
델타 배열을 이용해 2차원 배열 탐색하기
2차원 배열"행(row)"과 "열(column)" 두 차원을 가진 배열 (논리적 시점) 1차원 배열을 요소로 가지는 배열 (코드 시점) 2차원 배열을 활용하면, 게임의 보드판(예: 오목판, 체스판), 이미지의 픽셀 정보
record47584.tistory.com
'자료구조 & 알고리즘 > 문제 풀이 (프로그래머스)' 카테고리의 다른 글
| 모음 사전 (DFS) (0) | 2026.06.25 |
|---|---|
| 소수 찾기 (DFS) (0) | 2026.06.24 |
| 가장 큰 수 (0) | 2026.06.22 |
| 다리를 지나가는 트럭 (큐) (0) | 2026.06.19 |
| 롤케이크 자르기 (0) | 2026.06.18 |
