https://programmers.co.kr/learn/courses/30/lessons/68645
리팩토링 코드
/**
1. n*n배열 생성(최종 정답 배열은 n*(n+1)/2)
2. 높이 증가하면서 0이거나 배열안이면 +1씩 증가된 숫자 넣기
3. 그다음 가로방향 증가(0이거나 배열안이면)
4. 가로 -1 높이 -1 하면서 움직이기
5. 2~4번 반복하며 진행
**/
class Solution {
public int[] solution(int n) {
int[][] map = new int[n][n];
int num = 1;
int x= -1, y = 0;
for(int i = 0; i < n; i++){
for(int j = i; j < n; j++){
if(i % 3 == 0){
x++;
}else if(i % 3 == 1){
y++;
}else{
x--;
y--;
}
map[x][y] = num++;
}
}
int[] answer = new int[n*(n+1)/2];
int idx = 0;
for(int i = 0; i < n; i++){
for(int j = 0; j <= i; j++){
answer[idx++] = map[i][j];
}
}
return answer;
}
}
원래코드
/**
1. n*n배열 생성
2. 높이 증가하면서 0이거나 배열안이면 +1씩 증가된 숫자 넣기
3. 그다음 가로방향 증가(0이거나 배열안이면)
4. 가로 -1 높이 -1 하면서 움직이기
5. 2~4번 반복하며 진행
**/
class Solution {
public int[] solution(int n) {
int[][] map = new int[n][n];
int num = 1;
int x= 0, y = 0;
// 초기값
map[x][y] = 1;
num++;
while(true){
boolean check = false;
// 세로 증가
while(true){
if(x+1< n && map[x+1][y] == 0){
x++;
check = true;
}else{
break;
}
map[x][y] = num;
num++;
}
// 가로 증가
while(true){
if(y+1 < n && map[x][y+1] == 0){
y++;
check = true;
}else{
break;
}
map[x][y] = num;
num++;
}
//가로 세로 감소
while(true){
if(x-1 >= 0 && y-1 >= 0 && map[x-1][y-1] == 0){
x--;
y--;
check = true;
}else{
break;
}
map[x][y] = num;
num++;
}
if(check == false) break;
}
int[] answer = new int[n*(n+1)/2];
int idx = 0;
for(int i = 0; i < n; i++){
for(int j = 0; j <= i; j++){
answer[idx++] = map[i][j];
}
}
return answer;
}
}
'Algorithm > 프로그래머스풀이' 카테고리의 다른 글
[알고리즘 문제풀이] 프로그래머스 - 구명 보트 / JAVA(자바) (0) | 2022.03.12 |
---|---|
[알고리즘 문제풀이] 프로그래머스 - 멀쩡한 사각형 / JAVA(자바) (0) | 2022.03.11 |
[알고리즘 문제풀이] 프로그래머스 - n진수게임 / JAVA(자바) (0) | 2022.03.08 |
[알고리즘 문제풀이] 프로그래머스 - 기능개발 / JAVA(자바) (0) | 2022.03.07 |
[알고리즘 문제풀이] 프로그래머스 - 더 맵게 / JAVA(자바) (0) | 2022.03.07 |
댓글