728x90
반응형
정수를 나선형으로 배치하기
문제 설명
양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.
제한사항
- 1 ≤ n ≤ 30
입출력 예
입출력 예 설명
입출력 예 #1
예제 1번의 n의 값은 4로 4 × 4 배열에 다음과 같이 1부터 16까지 숫자를 채울 수 있습니다.
입출력 예 #2
예제 2번의 n의 값은 5로 5 × 5 배열에 다음과 같이 1부터 25까지 숫자를 채울 수 있습니다.
정답 코드
728x90
class Solution {
public int[][] solution(int n) {
int[][] answer = new int[n][n];
int value = 1; // 채워야 할 정수 값
int row = 0; // 현재 행 위치
int col = 0; // 현재 열 위치
int direction = 0; // 이동 방향 (0: 오른쪽, 1: 아래, 2: 왼쪽, 3: 위)
while (value <= n * n) { // 모든 정수 값을 배열에 채우면 종료
answer[row][col] = value++; // 현재 위치에 값을 채우고 다음 값으로 이동
// 다음 이동할 위치 계산
if (direction == 0) { // 오른쪽 방향으로 이동
if (col == n - 1 || answer[row][col + 1] != 0) {
direction = 1;
row++;
} else {
col++;
}
} else if (direction == 1) { // 아래쪽 방향으로 이동
if (row == n - 1 || answer[row + 1][col] != 0) {
direction = 2;
col--;
} else {
row++;
}
} else if (direction == 2) { // 왼쪽 방향으로 이동
if (col == 0 || answer[row][col - 1] != 0) {
direction = 3;
row--;
} else {
col--;
}
} else if (direction == 3) { // 위쪽 방향으로 이동
if (row == 0 || answer[row - 1][col] != 0) {
direction = 0;
col++;
} else {
row--;
}
}
}
return answer;
}
}
풀이
- 배열 n*n 크기만큼 선언
- while문으로 모두 채워질 때까지 반복
- direction 변수를 활용하여 한줄 반복 -> 값이 있거나, 끝이라면 direction값을 바꿔서 반복
- direction 이동 방향 (0: 오른쪽, 1: 아래, 2: 왼쪽, 3: 위)
실행 결과
728x90
반응형
'Coding Test > Java' 카테고리의 다른 글
[프로그래머스] 배열 조각하기 | Java - 민민의 하드디스크 - 티스토리 (0) | 2023.04.25 |
---|---|
[프로그래머스] 두 원 사이의 정수 쌍 | Java - 민민의 하드디스크 - 티스토리 (0) | 2023.04.14 |
[프로그래머스] 연속 펄스 부분 수열의 합 | Java - 민민의 하드디스크 - 티스토리 (1) | 2023.04.13 |
[프로그래머스] 달리기 경주 | Java - 민민의 하드디스크 - 티스토리 (0) | 2023.04.12 |
[프로그래머스] 연속된 부분 수열의 합 | Java - 민민의 하드디스크 - 티스토리 (0) | 2023.04.12 |