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
Empty file removed Members/SeHwan/Week12/.keep
Empty file.
Original file line number Diff line number Diff line change
@@ -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);
}
}
}
31 changes: 31 additions & 0 deletions Members/SeHwan/Week12/15651. N과 M (3)/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# [Silver III] N과 M (3) - 15651

[문제 링크](https://www.acmicpc.net/problem/15651)

### 성능 요약

메모리: 207356 KB, 시간: 596 ms

### 분류

백트래킹

### 문제 설명

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

<ul>
<li>1부터 N까지 자연수 중에서 M개를 고른 수열</li>
<li>같은 수를 여러 번 골라도 된다.</li>
</ul>

### 입력

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

### 출력

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

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

36 changes: 36 additions & 0 deletions Members/SeHwan/Week12/5639. 이진 검색 트리/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# [Gold V] 이진 검색 트리 - 5639

[문제 링크](https://www.acmicpc.net/problem/5639)

### 성능 요약

메모리: 19400 KB, 시간: 692 ms

### 분류

그래프 이론, 그래프 탐색, 재귀, 트리

### 문제 설명

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

<ul>
<li>노드의 왼쪽 서브트리에 있는 모든 노드의 키는 노드의 키보다 작다.</li>
<li>노드의 오른쪽 서브트리에 있는 모든 노드의 키는 노드의 키보다 크다.</li>
<li>왼쪽, 오른쪽 서브트리도 이진 검색 트리이다.</li>
</ul>

<p style="text-align: center;"><img alt="" src="https://onlinejudgeimages.s3-ap-northeast-1.amazonaws.com/upload/images/bsearchtree.png" style="height:242px; width:426px"></p>

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

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

### 입력

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

### 출력

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

Original file line number Diff line number Diff line change
@@ -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);
}

}
2 changes: 1 addition & 1 deletion Problem/Week12.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Week12
- https://www.acmicpc.net/problem/
- 백트래킹
- 15652 N과 M (3)
- 15651 N과 M (3)
- 10971 외판원 순회 2
- 트리
- 5639 이진 검색 트리
Expand Down