삼각 달팽이
문제 설명
정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
제한사항
- n은 1 이상 1,000 이하입니다.
입출력 예
n | result |
---|---|
4 | [1,2,9,3,10,8,4,5,6,7] |
5 | [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] |
6 | [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11] |
입출력 예 설명
입출력 예 #1
- 문제 예시와 같습니다.
입출력 예 #2
- 문제 예시와 같습니다.
입출력 예 #3
- 문제 예시와 같습니다.
풀이
문제를 보면서 어떻게 풀어야 할 까 규칙을 생각해보다가 그대로 구현해봤습니다.
LEVEL2 문제라서 처음 생각 한 게 한 번에 쉽게 풀었습니다.
x
import java.util.*;
class Solution {
public static int[] solution(int n) {
int map[][] = new int[n+1][n+1];
int cnt = 1;
int row = 1;
int col = 1;
while(true) {
if(check(n,map)) {
for(int i=row; i<=n; i++) {
if(map[i][col]!=0) {
row = i-1;
break;
}
row = i;
map[i][col] = cnt;
cnt++;
} // / 방향 채우기
// ㅡ 방향 채우기
for(int i=col+1; i<=n; i++) {
if(map[row][i]!=0) {
col = i-1;
break;
}
col = i;
map[row][i] = cnt;
cnt++;
}
// \ 방향 채우기
for(int i=row-1; i>=1; i--) {
col--;
if(map[i][col]!=0) {
row = i+1;
col+=1;
break;
}
map[i][col] = cnt;
cnt++;
}
row+=1;
}
else {
break;
}
}
int arr_cnt = 0;
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
if(map[i][j]!=0) {
arr_cnt++;
}
}
}
int[] answer = new int[arr_cnt];
arr_cnt = 0;
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
if(map[i][j]!=0) {
answer[arr_cnt] = map[i][j];
arr_cnt++;
}
}
}
return answer;
}
public static boolean check(int n ,int map[][]) {
for(int i=1; i<=n; i++) {
for(int j=1; j<=i; j++) {
if(map[i][j]==0) {
return true;
}
}
}
return false;
}
}
'알고리즘' 카테고리의 다른 글
[프로그래머스] 타겟넘버 -JAVA (0) | 2021.02.02 |
---|---|
[프로그래머스] 위장 - JAVA (0) | 2021.02.02 |
[프로그래머스] 카펫 -JAVA (0) | 2021.02.02 |
[백준 17825] 주사위 윷놀이 - JAVA (0) | 2021.01.26 |
[백준 17822] 원판 돌리기 - JAVA (0) | 2021.01.25 |