728x90
반응형
문제 링크
programmers.co.kr/learn/courses/30/lessons/68645
* 프로그래머스 - Level 2 - (자바)삼각달팽이 - 기본 배열 돌리기
< 로직 >
* 2차원 배열을 만들어 순서에 맞게 넣기
* 세로 가로 대각선의 3가지 부분으로 나누어 생각
* 인덱스 관리를 잘 하는 것이 관건
class Solution {
public int[] solution(int n) {
int max = n*(n+1)/2;
int map[][] = new int[n][n]; // 맵의 절반만 쓰자
int top = 0; // 세로 인덱스
int left = 0; // 가로 인덱스
int tmp = 0;
int idx = 1;
/*
* 세로
* 가로
* 오른쪽 대각선
* 3부분으로 나누어 생각
* */
while(idx != max+1) {
// 세로
for(; top < n - tmp; top++) {
map[top][left] = idx++;
}
top--;
left++;
// 가로
for(; left < n - tmp; left++) {
if(map[top][left] != 0) break;
map[top][left] = idx++;
}
top--;
left -= 2;
// 대각선
for(; top > tmp && left > tmp; top--, left--) {
map[top][left] = idx++;
}
top += 2;
left++;
tmp++;
}
int[] answer = new int[max];
int index = 0;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if(map[i][j] == 0) continue;
answer[index++] = map[i][j];
}
}
return answer;
}
}
반응형
'문제풀이 > Programmers 문제풀이' 카테고리의 다른 글
[ 알고리즘 ] 코딩 - Programmers - 네트워크.java (0) | 2021.01.08 |
---|---|
[ 알고리즘 ] 코딩 - Programmers - 섬연결하기.java (0) | 2021.01.07 |
[ 알고리즘 ] 코딩 - Programmers - 기능개발.java (0) | 2021.01.06 |
[ 알고리즘 ] 코딩 - Programmers - 프린터.java (0) | 2020.12.26 |
[ 알고리즘 ] 코딩 - Programmers - 불량 사용자.java (0) | 2020.12.22 |