Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions dohun/week8/ProgrammersHanoi.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import java.util.*;

class ProgrammersHanoi {

// 이동 경로를 저장할 리스트
// 각 원소는 [from, to] 형태
List<int[]> moves = new ArrayList<>();

public int[][] solution(int n) {
// n개의 원판을 1번 기둥에서 3번 기둥으로 옮긴다
hanoi(n, 1, 3, 2);

// List -> int[][] 변환
int[][] answer = new int[moves.size()][2];
for (int i = 0; i < moves.size(); i++) {
answer[i] = moves.get(i);
}
return answer;
}

// 하노이 재귀 함수
// n 옮길 원판 개수
// from 시작 기둥
// to 목표 기둥
// aux 보조 기둥
private void hanoi(int n, int from, int to, int aux) {
// 종료 조건: 옮길 원판이 없으면 끝
if (n == 0) {
return;
}

// n-1개를 from → aux 로 이동
hanoi(n - 1, from, aux, to);

// 가장 큰 원판을 from → to 로 이동
moves.add(new int[]{from, to});

// n-1개를 aux → to 로 이동
hanoi(n - 1, aux, to, from);
}
}
51 changes: 51 additions & 0 deletions dohun/week8/ProgrammersTriangleSnail.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
class Solution {
public int[] solution(int n) {

// 삼각형 배열 생성
int[][] triangle = new int[n][];
for (int i = 0; i < n; i++) {
triangle[i] = new int[i + 1];
}

int num = 1; // 채울 숫자
int row = -1; // 현재 행 위치
int col = 0; // 현재 열 위치

// 방향 반복 (총 n번)
for (int i = 0; i < n; i++) {

// 한 방향으로 이동하는 횟수는 n - i
for (int j = i; j < n; j++) {

// 아래로 이동
if (i % 3 == 0) {
row++;
}
// 오른쪽 이동
else if (i % 3 == 1) {
col++;
}
// 왼쪽 위 대각선 이동
else {
row--;
col--;
}

triangle[row][col] = num++;
}
}

// 삼각형을 1차원 배열로 변환
int size = n * (n + 1) / 2;
int[] answer = new int[size];
int idx = 0;

for (int i = 0; i < n; i++) {
for (int j = 0; j < triangle[i].length; j++) {
answer[idx++] = triangle[i][j];
}
}

return answer;
}
}