문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/181832
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
양의 정수 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번의 n의 값은 4로 4 × 4 배열에 다음과 같이 1부터 16까지 숫자를 채울 수 있습니다.
- 따라서 [[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]를 return 합니다.
- 예제 2번의 n의 값은 5로 5 × 5 배열에 다음과 같이 1부터 25까지 숫자를 채울 수 있습니다.
- 따라서 [[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 합니다.
코드 구현
class Solution {
public int[][] solution(int n) {
int[][] answer = new int[n][n];
int num = 1;
int rowStart = 0;
int colStart = 0;
int rowEnd = n - 1;
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;
}
}
풀이
- num이 n * n 보다 작거나 같을 때까지 반복문을 실행합니다. 반복문은 배열을 나선형으로 채우기 위한 과정을 수행합니다.
- 왼쪽에서 오른쪽으로 이동합니다. colStart부터 colEnd까지 반복하면서 answer[rowStart][i]에 num 값을 대입합니다.
- 왼쪽 위에서 아래쪽으로 이동합니다. rowStart + 1부터 rowEnd까지 반복하면서 answer[i][colEnd]에 num 값을 대입합니다.
- 오른쪽에서 왼쪽으로 이동합니다. colEnd - 1부터 colStart까지 반복하면서 answer[rowEnd][i]에 num 값을 대입합니다.
- 왼쪽 아래에서 위쪽으로 이동합니다. rowEnd -1부터 rowStart + 1까지 반복하면서 answer[i][colStart]에 num값을 대입합니다.
- 행과 열의 시작과 끝 인덱스를 조정하여 다음 회전을 진행합니다.
- 이후 완성된 이차열 배열을 반환합니다.
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Java :: 겹치는 선분의 길이 (0) | 2024.03.28 |
---|---|
[프로그래머스] Java :: 배열의 원소 삭제하기 (0) | 2024.03.24 |
[프로그래머스] Java :: 전국 대회 선발 고사 (0) | 2024.03.23 |
댓글