알고리즘
프로그래머스 정수를 나선형으로 배치하기 (JAVA)
박카스마시며코딩
2023. 5. 17. 22:33
https://school.programmers.co.kr/learn/courses/30/lessons/181832
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
저는 구현을 통해 문제를 해결하였습니다.
한쪽 방향으로 배열을 채우고 범위를 넘어가거나 채워져있다면 방향을 90도 회전시켰습니다.
여기서 주의할 점은 배열의 크기가 1일 때 컴파일 에러가 나오지 않게 하는 것이였습니다.
저는 처음에 while을 true로 하고 진행하여서 컴파일 에러가 나와 while문 조건을 바꿔 문제를 해결하였습니다.
class Solution {
private static final int[] DY = {-1,0,1,0};
private static final int[] DX = {0,1,0,-1};
public int[][] solution(int n) {
int[][] answer = makeMap(n);
return answer;
}
private static int[][] makeMap(int n){
int[][] answer = new int[n][n];
int y = 0;
int x = 0;
int num = 1;
int dir = 1;
while(y >= 0 && y < n && x >= 0 && x < n){
if(answer[y][x] != 0){
break;
}
answer[y][x] = num++;
y += DY[dir];
x += DX[dir];
if(x < 0 || x >= n || y < 0 || y >= n || answer[y][x] != 0){
y -= DY[dir];
x -= DX[dir];
dir = (dir+1) % 4;
y += DY[dir];
x += DX[dir];
}
}
return answer;
}
}