Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- sorting
- array
- Data Structure
- Method
- implement
- SQL
- Stack
- Counting
- 자바
- Math
- two pointers
- dynamic programming
- 코테
- database
- java
- Number Theory
- Matrix
- bit manipulation
- Tree
- 구현
- Binary Tree
- string
- greedy
- hash table
- Binary Search
- geometry
- 파이썬
- 코딩테스트
- simulation
- Class
Archives
- Today
- Total
코린이의 소소한 공부노트
[프로그래머스/Lv.0] 정수를 나선형으로 배치하기 본문
1 | 2 | 3 | 4 |
12 | 13 | 14 | 5 |
11 | 16 | 15 | 6 |
10 | 9 | 8 | 7 |
1. Input, Output, Example
- n × n 배열에 1부터 n^2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 반환
2. Constraint
1) 1 ≤ n ≤ 30
3. Code
class Solution {
public int[][] solution(int n) {
int[][] ans = new int[n][n];
int number = 1, x = 0, y = 0, change = 0;
while(number<=n*n){
switch(change%4){
case 0: // 오른쪽 방향으로 전진
ans[x][y++] = number++;
if(y==n || ans[x][y]!=0){ // 맨 오른쪽 or 다음 칸이 이미 방문한 곳이라면
y--; x++; // 아래쪽으로 방향 전환
change++;
} break;
case 1: // 아래쪽 방향으로 전진
ans[x++][y] = number++;
if(x==n || ans[x][y]!=0){ // 맨 아래 or 다음 칸이 이미 방문한 곳이라면
x--; y--; // 왼쪽으로 방향 전환
change++;
} break;
case 2: // 왼쪽 방향으로 전진
ans[x][y--] = number++;
if(y==-1 || ans[x][y]!=0){ // 맨 왼쪽 or 다음 칸이 이미 방문한 곳이라면
y++; x--; // 위쪽으로 방향 전환
change++;
} break;
default: // 위쪽 방향으로 전진
ans[x--][y] = number++;
if(x==-1 || ans[x][y]!=0){ // 맨 위쪽 or 다음 칸이 이미 방문한 곳이라면
x++; y++; // 왼쪽으로 방향 전환
change++;
}
}
}
return ans;
}
}
- +1
'코딩테스트 풀이 > JAVA' 카테고리의 다른 글
[LeetCode/Medium] 3. Longest Substring Without Repeating Characters (0) | 2023.07.04 |
---|---|
[LeetCode/Medium] 2. Add Two Numbers (0) | 2023.07.04 |
[프로그래머스/Lv.1] 크레인 인형뽑기 게임 (0) | 2023.07.04 |
[프로그래머스/Lv.1] 문자열 나누기 (0) | 2023.07.04 |
[프로그래머스/Lv.1] 완주하지 못한 선수 (0) | 2023.07.04 |