https://school.programmers.co.kr/learn/courses/30/lessons/181832
문제 풀이
[프로그래머스] Lv.0 정수를 나선형으로 배치하기.java (velog.io)
- 시계방향 나선형은 오른쪽으로 -> 아래쪽으로 -> 왼쪽으로 -> 위쪽으로 진행
- for loop 4개를 사용하여 num을 1씩 늘리면서 각 위치에 저장
- 오른쪽으로 -> 아래쪽으로 -> 왼쪽으로 -> 위쪽으로 가 한번 끝나면 각 인덱스 감소
정답
class Solution {
public int[][] solution(int n) {
int[][] answer = new int[n][n];
int num =1;
int rowStart = 0; //행의 시작 인덱스
int rowEnd = n-1; //행의 끝 인덱스
int colStart = 0; //열의 시작 인덱스
int colEnd = n-1; //열의 끝 인덱스
while(num <=n*n)
{
//왼쪽 -> 오른쪽
for(int i=colStart; i<=colEnd; i++)
{
answer[rowStart][i] = num++;
}
rowStart++; //행의 시작 인덱스 증가
//위쪽->아래쪽
for(int i=rowStart; i<=rowEnd; i++)
{
answer[i][colEnd] = num++;
}
colEnd--; //열의 끝 인덱스 감소
//오른쪽 -> 왼쪽
for(int i=colEnd; i>=colStart; i--)
{
answer[rowEnd][i] = num++;
}
rowEnd--; //행의 끝 인덱스 감소
//아래쪽 -> 위쪽
for(int i=rowEnd; i>=rowStart; i--)
{
answer[i][colStart] = num++;
}
colStart++; //열의 시작 인덱스 증가
}
return answer;
}
}
다른 사람의 풀이
1)
class Solution {
public int[][] solution(int n) {
int[][] answer = new int[n][n];
int num = 1;
int x = 0, y = 0;
int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0};
int direction = 0;
while (num <= n * n) {
answer[x][y] = num++;
int nx = x + dx[direction];
int ny = y + dy[direction];
if (nx < 0 || nx >= n || ny < 0 || ny >= n || answer[nx][ny] != 0) {
direction = (direction + 1) % 4; //범위 밖에 나갔을 때 방향전환
nx = x + dx[direction];
ny = y + dy[direction];
}
x = nx;
y = ny;
}
return answer;
}
}
2)
class Solution {
public int[][] solution(int n) {
int[][] answer = new int[n][n];
int num=1;
int start=0;
int end=n;
while(num <= n*n){
//->
for(int j=start;j<end;j++)
answer[start][j]=num++;
//v
for(int i=start+1;i<end;i++)
answer[i][end-1]=num++;
//<
for(int j=end-2;j>=start;j--)
answer[end-1][j]=num++;
//^
for(int i=end-2;i>start;i--)
answer[i][start]=num++;
start++;
end--;
}
return answer;
}
}
'Java > 프로그래머스' 카테고리의 다른 글
[JAVA] 프로그래머스 - 정사각형으로 만들기 (0) | 2024.04.17 |
---|---|
[JAVA] 프로그래머스 - 특별한 이차원 배열 2 (0) | 2024.04.17 |
[JAVA] 프로그래머스 - 특별한 이차원 배열 1 (0) | 2024.04.17 |
[JAVA] 프로그래머스 - l로 만들기 (0) | 2024.04.17 |
[JAVA] 프로그래머스 - 조건에 맞게 수열 변환하기 3 (0) | 2024.04.17 |