https://school.programmers.co.kr/learn/courses/30/lessons/68645
코딩테스트 연습 > 월간 코드 챌린지 시즌1 > 삼각 달팽이
난이도: LEVEL2
알고리즘 유형: 구현
(대각선 왼쪽 아래 → 오른쪽 → 대각선 오른쪽 위) 무한 반복
더 이상 이동 불가능할 때까지
정답 코드
import java.util.*;
class Solution {
// 대각선 왼쪽 아래 / 오른쪽 / 대각선 위로
static int [] arx = {1,0,-1};
static int [] ary = {0,1,-1};
public int[] solution(int n) {
int [][] memo = new int [n+1][n+1];
memo[1][1] = 1;
int x = 1; int y = 1;
int cnt = 2;
while(true){
int d = -1;
for(int i = 0; i < 3; i++){
int nx = arx[i] + x;
int ny = ary[i] + y;
if(1 <= nx && 1 <= ny && nx <= n && ny <= n){
if(memo[nx][ny] == 0){
d = i; // 방향 정하기
break;
}
}
}
if(d == -1) break;
while(true){
boolean flag = true;
int nx = arx[d] + x;
int ny = ary[d] + y;
if(1 <= nx && 1 <= ny && nx <= n && ny <= n){
if(memo[nx][ny] == 0){
flag = false;
memo[nx][ny] = cnt++;
x = nx;
y = ny;
}
}
if(flag) break;
}
}
ArrayList<Integer> list = new ArrayList<>();
for(int i = 1; i <= n; i++){
for(int j = 1; j <= i; j++){
list.add(memo[i][j]);
}
}
int [] answer = new int [list.size()];
for(int i = 0; i < list.size(); i++){
answer[i] = list.get(i);
}
return answer;
}
}
'Algorithm > Programmers Java' 카테고리의 다른 글
[JAVA] 프로그래머스 LEVEL2 수식 최대화 (0) | 2024.09.29 |
---|---|
[JAVA] 프로그래머스 LEVEL2 [3차] n진수 게임 (0) | 2024.09.29 |
[JAVA] 프로그래머스 LEVEL2 택배상자 (0) | 2024.09.28 |
[JAVA] 프로그래머스 LEVEL2 테이블 해시 함수 (1) | 2024.09.28 |
[JAVA] 프로그래머스 LEVEL3 표 병합 (1) | 2024.09.27 |