diff --git a/Members/SeHwan/Week12/.keep b/Members/SeHwan/Week12/.keep deleted file mode 100644 index e69de29..0000000 diff --git "a/Members/SeHwan/Week12/15651.\342\200\205N\352\263\274\342\200\205M\342\200\205\357\274\2103\357\274\211/N\352\263\274\342\200\205M\342\200\205\357\274\2103\357\274\211.java" "b/Members/SeHwan/Week12/15651.\342\200\205N\352\263\274\342\200\205M\342\200\205\357\274\2103\357\274\211/N\352\263\274\342\200\205M\342\200\205\357\274\2103\357\274\211.java" new file mode 100644 index 0000000..c1a832f --- /dev/null +++ "b/Members/SeHwan/Week12/15651.\342\200\205N\352\263\274\342\200\205M\342\200\205\357\274\2103\357\274\211/N\352\263\274\342\200\205M\342\200\205\357\274\2103\357\274\211.java" @@ -0,0 +1,43 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class Main { + + static int N; + static int M; + static boolean[] visited; + static int[] arr; + static StringBuilder stringBuilder = new StringBuilder(); + + public static void main(String[] args) throws IOException { + + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); + + String[] str = bufferedReader.readLine().split(" "); + N = Integer.parseInt(str[0]); + M = Integer.parseInt(str[1]); + + visited = new boolean[N]; + arr = new int[M]; + + dfs(0); + System.out.println(stringBuilder.toString()); + + } + + static void dfs(int depth) { + if (depth == M) { + for (int i : arr) { + stringBuilder.append(i + " "); + } + stringBuilder.append("\n"); + return; + } + + for (int i = 0; i < N; i++) { + arr[depth] = i + 1; + dfs(depth + 1); + } + } +} \ No newline at end of file diff --git "a/Members/SeHwan/Week12/15651.\342\200\205N\352\263\274\342\200\205M\342\200\205\357\274\2103\357\274\211/README.md" "b/Members/SeHwan/Week12/15651.\342\200\205N\352\263\274\342\200\205M\342\200\205\357\274\2103\357\274\211/README.md" new file mode 100644 index 0000000..8c392c0 --- /dev/null +++ "b/Members/SeHwan/Week12/15651.\342\200\205N\352\263\274\342\200\205M\342\200\205\357\274\2103\357\274\211/README.md" @@ -0,0 +1,31 @@ +# [Silver III] N과 M (3) - 15651 + +[문제 링크](https://www.acmicpc.net/problem/15651) + +### 성능 요약 + +메모리: 207356 KB, 시간: 596 ms + +### 분류 + +백트래킹 + +### 문제 설명 + +

자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.

+ + + +### 입력 + +

첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 7)

+ +### 출력 + +

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.

+ +

수열은 사전 순으로 증가하는 순서로 출력해야 한다.

+ diff --git "a/Members/SeHwan/Week12/5639.\342\200\205\354\235\264\354\247\204\342\200\205\352\262\200\354\203\211\342\200\205\355\212\270\353\246\254/README.md" "b/Members/SeHwan/Week12/5639.\342\200\205\354\235\264\354\247\204\342\200\205\352\262\200\354\203\211\342\200\205\355\212\270\353\246\254/README.md" new file mode 100644 index 0000000..55fa2b9 --- /dev/null +++ "b/Members/SeHwan/Week12/5639.\342\200\205\354\235\264\354\247\204\342\200\205\352\262\200\354\203\211\342\200\205\355\212\270\353\246\254/README.md" @@ -0,0 +1,36 @@ +# [Gold V] 이진 검색 트리 - 5639 + +[문제 링크](https://www.acmicpc.net/problem/5639) + +### 성능 요약 + +메모리: 19400 KB, 시간: 692 ms + +### 분류 + +그래프 이론, 그래프 탐색, 재귀, 트리 + +### 문제 설명 + +

이진 검색 트리는 다음과 같은 세 가지 조건을 만족하는 이진 트리이다.

+ + + +

+ +

전위 순회 (루트-왼쪽-오른쪽)은 루트를 방문하고, 왼쪽 서브트리, 오른쪽 서브 트리를 순서대로 방문하면서 노드의 키를 출력한다. 후위 순회 (왼쪽-오른쪽-루트)는 왼쪽 서브트리, 오른쪽 서브트리, 루트 노드 순서대로 키를 출력한다. 예를 들어, 위의 이진 검색 트리의 전위 순회 결과는 50 30 24 5 28 45 98 52 60 이고, 후위 순회 결과는 5 28 24 45 30 60 52 98 50 이다.

+ +

이진 검색 트리를 전위 순회한 결과가 주어졌을 때, 이 트리를 후위 순회한 결과를 구하는 프로그램을 작성하시오.

+ +### 입력 + +

트리를 전위 순회한 결과가 주어진다. 노드에 들어있는 키의 값은 106보다 작은 양의 정수이다. 모든 값은 한 줄에 하나씩 주어지며, 노드의 수는 10,000개 이하이다. 같은 키를 가지는 노드는 없다.

+ +### 출력 + +

입력으로 주어진 이진 검색 트리를 후위 순회한 결과를 한 줄에 하나씩 출력한다.

+ diff --git "a/Members/SeHwan/Week12/5639.\342\200\205\354\235\264\354\247\204\342\200\205\352\262\200\354\203\211\342\200\205\355\212\270\353\246\254/\354\235\264\354\247\204\342\200\205\352\262\200\354\203\211\342\200\205\355\212\270\353\246\254.java" "b/Members/SeHwan/Week12/5639.\342\200\205\354\235\264\354\247\204\342\200\205\352\262\200\354\203\211\342\200\205\355\212\270\353\246\254/\354\235\264\354\247\204\342\200\205\352\262\200\354\203\211\342\200\205\355\212\270\353\246\254.java" new file mode 100644 index 0000000..427b2db --- /dev/null +++ "b/Members/SeHwan/Week12/5639.\342\200\205\354\235\264\354\247\204\342\200\205\352\262\200\354\203\211\342\200\205\355\212\270\353\246\254/\354\235\264\354\247\204\342\200\205\352\262\200\354\203\211\342\200\205\355\212\270\353\246\254.java" @@ -0,0 +1,54 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class Main { + + public static void main(String[] args) throws IOException { + + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); + Node root = new Node(Integer.parseInt(bufferedReader.readLine())); + + while(true) { + String str = bufferedReader.readLine(); + if (str == null) break; + root.insert(Integer.parseInt(str)); + } + + postOrder(root); + + } + + static class Node { + Node left; + Node right; + int key; + + public Node(int key) { + this.key = key; + } + + public void insert(int value) { + if (this.key > value) { // value가 현재 기준 노드의 key값보다 작으면 왼쪽으로 + if (this.left == null) { + this.left = new Node(value); + } else { + this.left.insert(value); + } + } else { // value가 현재 기준 노드의 key값보다 크면 오른쪽으로 + if (this.right == null) { + this.right = new Node(value); + } else { + this.right.insert(value); + } + } + } + } + + static void postOrder(Node node) { + if (node.left != null) postOrder(node.left); + if (node.right != null) postOrder(node.right); + System.out.println(node.key); + } + +} \ No newline at end of file diff --git a/Problem/Week12.md b/Problem/Week12.md index d833942..55b4b64 100644 --- a/Problem/Week12.md +++ b/Problem/Week12.md @@ -1,7 +1,7 @@ # Week12 - https://www.acmicpc.net/problem/ - 백트래킹 - - 15652 N과 M (3) + - 15651 N과 M (3) - 10971 외판원 순회 2 - 트리 - 5639 이진 검색 트리