우당탕탕 개발일지
[프로그래머스] 정수를 나선형으로 배치하기(Java, Level.0) 본문
반응형
문제
양의 정수 n이 매개변수로 주어집니다.
n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.
입출력 예
풀이
사실 어떻게 하라는건지 감이 안옴..... 그래서 일단 엑셀에 한번 표현!
'질문하기' 살펴보니까 오른쪽 -> 아래 -> 왼쪽 -> 위 이걸 생각하면서 언제 방향을 바꿀지에 대해서 고민해보라고 했다..
처음에는 이중 반복문으로 잡고 있다가 while문 사용해보기로..!
변수는 총 4개가 필요했다.
row : 행 번호
col : 열 번호
num : 저장할 숫자
d : 이동 방향을 의미하는 변수
* 변수 d는 아래와 같은 규칙으로 이동해보기로 했다.
0: 오른쪽, 1: 아래, 2: 왼쪽, 3: 위
while문에서 answer 배열에 num를 대입하고 사람이 한칸씩 숫자를 작성하는 것처럼 n*n 값이 나올떄까지 움직인다.
switch문을 활용하여 움직일때마다 다음 방향을 계산하며 그에 따른 row, col 값을 조정한다.
최종 코드
public int[][] solution1(int n) {
System.out.println("정수를 나선형으로 배치하기");
int[][] answer = new int[n][n];
int row = 0;
int col = 0;
int num = 1;
int d = 0; // 이동 방향 0: 오른쪽, 1: 아래, 2: 왼쪽, 3: 위
while (num <= n * n) {
answer[row][col] = num++;
// 다음 이동할 위치 계산
switch (d) {
case 0:
// 오른쪽으로로 끝까지 이동한 경우 || 다음 칸의 값이 이미 존재할 경우
if (col == n - 1 || 0 != answer[row][col + 1]) {
d = 1;
row++;
} else
col++;
break;
case 1:
// 아래로 끝까지 이동한 경우 || 다음 칸의 값이 이미 존재할 경우
if (row == n - 1 || 0 != answer[row + 1][col]) {
d = 2;
col--;
} else
row++;
break;
case 2:
// 왼쪽으로 끝까지 이동한 경우 || 다음 칸의 값이 이미 존재할 경우
if (col == 0 || 0 != answer[row][col - 1]) {
d = 3;
row--;
} else
col--;
break;
case 3:
// 위로 끝까지 이동한 경우 || 다음 칸의 값이 이미 존재할 경우
if (row == 0 || 0 != answer[row - 1][col]) {
d = 0;
col++;
} else
row--;
break;
default:
break;
}
}
return answer;
}
프로그래머스 문제
https://school.programmers.co.kr/learn/courses/30/lessons/181832
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
반응형
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 택배 상자 꺼내기 (Lv.1, Java) (1) | 2025.03.21 |
---|---|
[프로그래머스] 서버 증설 횟수 (Lv.2, Java) (1) | 2025.03.20 |
[프로그래머스] 더 맵게(Java, Level.2) (1) | 2025.02.10 |
[프로그래머스] 프로세스 (Java, Level.2) (1) | 2025.02.04 |
[프로그래머스] 장균의 크기에 따라 분류하기 1 (MySQL, Level.3) (0) | 2025.02.04 |