From f483da413ebd303c5d10bb4428400068cb5b5dc1 Mon Sep 17 00:00:00 2001 From: Dohun Kim Date: Sun, 21 Dec 2025 21:47:16 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=ED=94=84=EB=A1=9C=EA=B7=B8=EB=9E=98?= =?UTF-8?q?=EB=A8=B8=EC=8A=A4=20=ED=95=98=EB=85=B8=EC=9D=B4=ED=83=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dohun/week8/ProgrammersHanoi.java | 41 +++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 dohun/week8/ProgrammersHanoi.java diff --git a/dohun/week8/ProgrammersHanoi.java b/dohun/week8/ProgrammersHanoi.java new file mode 100644 index 0000000..74013b7 --- /dev/null +++ b/dohun/week8/ProgrammersHanoi.java @@ -0,0 +1,41 @@ +import java.util.*; + +class ProgrammersHanoi { + + // 이동 경로를 저장할 리스트 + // 각 원소는 [from, to] 형태 + List 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); + } +} From 25dff13421e20e2b93d2da026cd72b1860bd7a25 Mon Sep 17 00:00:00 2001 From: Dohun Kim Date: Sun, 21 Dec 2025 21:51:38 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=ED=94=84=EB=A1=9C=EA=B7=B8=EB=9E=98?= =?UTF-8?q?=EB=A8=B8=EC=8A=A4=20=EC=82=BC=EA=B0=81=EB=8B=AC=ED=8C=BD?= =?UTF-8?q?=EC=9D=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dohun/week8/ProgrammersTriangleSnail.java | 51 +++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 dohun/week8/ProgrammersTriangleSnail.java diff --git a/dohun/week8/ProgrammersTriangleSnail.java b/dohun/week8/ProgrammersTriangleSnail.java new file mode 100644 index 0000000..81f7901 --- /dev/null +++ b/dohun/week8/ProgrammersTriangleSnail.java @@ -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; + } +}