Level. 0
문제
양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.
* 제한사항
- 1 ≤ n ≤ 30
풀이
class Solution {
public int[][] solution(int n) {
int[][] answer = new int[n][n];
String vec = "right";
int count = 1;
int row = 0, col = 0;
while(count <= n*n){
answer[row][col] = count++;
if(vec.equals("right")){
if(col == n-1 || answer[row][col+1] != 0){
vec = "down";
row += 1;
}
else {
col += 1;
}
}
else
if(vec.equals("down")){
if(row == n-1 || answer[row+1][col] != 0){
vec = "left";
col -= 1;
}
else {
row += 1;
}
}
else
if(vec.equals("left")){
if(col == 0 || answer[row][col-1] != 0){
vec = "up";
row -= 1;
}
else {
col -= 1;
}
}
else
if(vec.equals("up")){
if(row == 0 || answer[row-1][col] != 0){
vec = "right";
col += 1;
}
else {
row -= 1;
}
}
}
return answer;
}
}
vec이라는 문자열을 사용하여 배열의 이동방향을 설정해주었다.
다른 풀이
class Solution {
public int[][] solution(int n) {
int[][] array = new int[n][n];
int num = 1;
int rowStart = 0;
int rowEnd = n - 1;
int colStart = 0;
int colEnd = n - 1;
while (rowStart <= rowEnd && colStart <= colEnd) {
// 왼쪽에서 오른쪽으로
for (int i = colStart; i <= colEnd; i++) {
array[rowStart][i] = num++;
}
rowStart++;
// 위에서 아래로
for (int i = rowStart; i <= rowEnd; i++) {
array[i][colEnd] = num++;
}
colEnd--;
// 오른쪽에서 왼쪽으로
for (int i = colEnd; i >= colStart; i--) {
array[rowEnd][i] = num++;
}
rowEnd--;
// 아래에서 위로
for (int i = rowEnd; i >= rowStart; i--) {
array[i][colStart] = num++;
}
colStart++;
}
return array;
}
}
열의 시작점과 끝점, 행의 시작점과 끝점을 이동시켜 배열을 만들었다.
https://school.programmers.co.kr/learn/courses/30/lessons/181832
'Algorithm > Programers - Java' 카테고리의 다른 글
[프로그래머스(Java)] 배열의 길이를 2의 거듭제곱으로 만들기 / Arrays.copyOf() (0) | 2023.10.25 |
---|---|
[프로그래머스(Java)] 진료순서 정하기 / Arrays.stream(), boxed(), collect(Collectors.toList()), indexOf() (0) | 2023.10.25 |
[프로그래머스(Java)] 평행 (0) | 2023.10.25 |
[프로그래머스(Java)] 겹치는 선분의 길이 / map.merge() (1) | 2023.10.24 |
[프로그래머스(Java)] 안전지대 (1) | 2023.10.19 |