diff --git "a/seahee/week8/\354\202\274\352\260\201\353\213\254\355\214\275\354\235\264.java" "b/seahee/week8/\354\202\274\352\260\201\353\213\254\355\214\275\354\235\264.java" new file mode 100644 index 0000000..32afa56 --- /dev/null +++ "b/seahee/week8/\354\202\274\352\260\201\353\213\254\355\214\275\354\235\264.java" @@ -0,0 +1,35 @@ +import java.util.*; + +class Solution { + public int[] solution(int n) { + int[][] tri = new int[n][n]; //삼각형 모양대로 값을 담을 리스트 + int total = n * (n + 1) / 2; + int[] answer = new int[total]; + + int r = -1, c = 0; + int num = 1; + + for (int i = 0; i < n; i++) { // i : 채워야 할 삼각형 변 순서 + for (int step = 0; step < n - i; step++) { + if (i % 3 == 0) { // 아래로 이동 + r++; + } else if (i % 3 == 1) { // 오른쪽 이동 + c++; + } else { // 왼쪽 위 대각선으로 이동 + r--; + c--; + } + tri[r][c] = num++; // 값 채우기 + } + } + + // 각 행 숫자 합치기 + int idx = 0; + for (int i = 0; i < n; i++) { + for (int j = 0; j <= i; j++) { // 삼각형 부분만 + answer[idx++] = tri[i][j]; + } + } + return answer; + } +} diff --git "a/seahee/week8/\355\225\230\353\205\270\354\235\264\354\235\230\355\203\221.java" "b/seahee/week8/\355\225\230\353\205\270\354\235\264\354\235\230\355\203\221.java" new file mode 100644 index 0000000..599d814 --- /dev/null +++ "b/seahee/week8/\355\225\230\353\205\270\354\235\264\354\235\230\355\203\221.java" @@ -0,0 +1,25 @@ +import java.util.*; + +class Solution { + public int[][] solution(int n) { + List moves = new ArrayList<>(); + hanoi(n, 1, 3, 2, moves); // 두번째 기둥을 이용해서 첫번째 -> 세번째로 큰 원판 옮기기 + return moves.toArray(new int[moves.size()][]); + } + + private void hanoi(int n, int from, int to, int via, List moves) { + if (n == 1) { // 옮겨야 할 원판이 하나 남으면 + moves.add(new int[]{from, to}); + return; + } + + // 1) 제일 큰 원판 제외 옮기기 + hanoi(n - 1, from, via, to, moves); + + // 2) 가장 큰 원판을 옮기기 + moves.add(new int[]{from, to}); + + // 3) 1)에서 옮겨놓은 원반으로 다시 반복 + hanoi(n - 1, via, to, from, moves); + } +}