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;
}
}
'알고리즘' 카테고리의 다른 글
백준 16441번 아기돼지와 늑대 (JAVA) (1) | 2023.05.19 |
---|---|
프로그래머스 삼각 달팽이 (JAVA) (0) | 2023.05.18 |
백준 2851번 슈퍼 마리오 (JAVA) (1) | 2023.05.16 |
백준 18404번 현명한 나이트 (JAVA) (0) | 2023.05.14 |
백준 17608번 막대기 (JAVA) (0) | 2023.05.13 |