반응형
문제 설명
양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.
제한사항
- 1 ≤ n ≤ 30
입출력 예
n | result |
4 | [[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]] |
5 | [[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24, 25, 20, 7], [14, 23, 22, 21, 8], [13, 12, 11, 10, 9]] |
입출력 예 설명
입출력 예 #1
- 예제 1번의 n의 값은 4로 4 × 4 배열에 다음과 같이 1부터 16까지 숫자를 채울 수 있습니다.
행\열 | 0 | 1 | 2 | 3 |
0 | 1 | 2 | 3 | 4 |
1 | 12 | 13 | 14 | 5 |
2 | 11 | 16 | 15 | 6 |
3 | 10 | 9 | 8 | 7 |
입출력 예 #2
- 예제 2번의 n의 값은 5로 5 × 5 배열에 다음과 같이 1부터 25까지 숫자를 채울 수 있습니다.
행\열 | 0 | 1 | 2 | 3 | 4 |
0 | 1 | 2 | 3 | 4 | 5 |
1 | 16 | 17 | 18 | 19 | 6 |
2 | 15 | 24 | 25 | 20 | 7 |
3 | 14 | 23 | 22 | 21 | 8 |
4 | 13 | 12 | 11 | 10 | 9 |
따라서 [[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24, 25, 20, 7], [14, 23, 22, 21, 8], [13, 12, 11, 10, 9]]를 return 합니다.
풀이
-> answer 배열을 n x n 사이즈로 초기화해준다. num 변수를 1로 생성한다. 행과 열의 시작과 끝 변수를 생성해준다. while문을 통해서 num이 n x n과 같아질 때까지 반복한다. "왼쪽에서 오른쪽으로 끝까지 간 후 위에서 아래로 끝까지 채우고, 다시 오른쪽에서 왼쪽으로 끝까지 채우고, 아래에서 위로 끝까지 채운다."를 반복한다. 이 때, for문이 종료될 때 마다, rowStart, rowEnd, colStart, colEnd를 적절하게 변화시켜줘야한다. 예를 들어 처음 오른쪽 끝까지 채운 후 아래로 가야할 때는 rowStart를 증가시켜 아래행부터 시작한다. 이렇게 반복문이 완료된 후 배열 answer를 return하면 결과이다.
코드
class Solution {
public int[][] solution(int n) {
int[][] answer = new int[n][n];
int num = 1; // 배열에 넣을 숫자를 초기화
int rowStart = 0, rowEnd = n - 1; // 행 시작과 끝 인덱스 초기화
int colStart = 0, 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;
}
}
반응형
'Algorithm > Programmers 입문' 카테고리의 다른 글
[프로그래머스 코딩기초 트레이닝] 꼬리 문자열(JAVA) (0) | 2024.01.25 |
---|---|
[프로그래머스 코딩기초 트레이닝] 전국 대회 선발 고사(JAVA) (1) | 2024.01.11 |
[프로그래머스 코딩기초 트레이닝] 문자열 묶기(JAVA) (1) | 2024.01.07 |
[프로그래머스 코딩기초 트레이닝] 무작위로 K개의 수 뽑기(JAVA) (0) | 2024.01.04 |
[프로그래머스 코딩기초 트레이닝] 문자열 바꿔서 찾기 (JAVA) (0) | 2023.12.27 |