반응형
문제분석
목표: 삼각달팽이의 규칙에의해 새롭게 탄생한 배열 출력하기
문제의 규칙은 이렇다.
높이가 n이 주어지면, n만큼 내려온후 방향을 오른쪽으로 바꾼다.
그리고 n의 길이만큼 이동한뒤 왼쪽 대각선으로 바꾼다.
->이를 반복함
이를 배열과 코드로 표현해보면,
내려올때는 배열의 y값을 늘리면된다. arr[i][j] -> arr[i+1][j]
오른쪽으로 이동할때는 배열의 x값을 늘리면된다. arr[i][j]-> arr[i][j+1]
대각선 왼쪽으로 이동할때는 배열의 x,y를 하나씩 줄이면된다. arr[i][j]-> arr[i-1][j-1]
여기까지 알면 나머지는 쉽다.
만약 n이 4면 4만큼 내려오고 3만큼 오른쪽 2만큼 대각선 1만큼 내려온다.
만약 n이 5면 5만큼 내려오고 4만큼 오른쪽 3만큼 대각선 2만큼 내려오고 1만큼 오른쪽으로 이동한다.
이걸 2중반복문으로 표현한다면 이렇게된다.
이 규칙을통해 입력한 배열을 다시 재배열하면 목표한 답이 나온다.
문제풀이
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
class Solution {
public int[] solution(int n) {
int[][] board = new int[n][];
int total =0;
for(int i=1;i<=n;i++){
total+=i;
board[i-1]=new int[i];
}
int h=-1;
int v=0;
int index=1;
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
if(i%3==0){
h++;
}
else if(i%3==1){
v++;
}
else{
h--;
v--;
}
board[h][v]=index++;
}
}
int[] answer = new int[total];
int num=0;
for(int i=0;i<n;i++){
for(int j=0;j<board[i].length;j++){
answer[num++]=board[i][j];
}
}
return answer;
}
}
|
cs |
반응형
'알고리즘 > 프로그래머스 Level2' 카테고리의 다른 글
[프로그래머스 , 자바] Level2: 주식가격 (0) | 2022.02.20 |
---|---|
[프로그래머스,자바] Level2: 영어 끝말잇기 (0) | 2022.02.13 |
[프로그래머스,Java] Levle2: 쿼드 압축 후 개수 세기 (0) | 2022.02.11 |
[프로그래머스,Java] Level2: 후보키 (0) | 2022.02.11 |
[프로그래머스,Java] Level2:양궁대회 (0) | 2022.02.08 |