Skip to content

Commit 63e41ee

Browse files
authored
Feat/22week (#20)
* feat: 22주차 구현
1 parent 6255085 commit 63e41ee

12 files changed

+927
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package org.example._22week;
2+
3+
import java.io.BufferedReader;
4+
import java.io.InputStreamReader;
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
import java.util.Scanner;
8+
9+
public class DecreasingNumber {
10+
11+
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
12+
private static int N;
13+
private static List<Long> decreasingNumbers = new ArrayList<>();
14+
15+
public static void main(String[] args) {
16+
final Scanner sc = new Scanner(System.in);
17+
N = sc.nextInt();
18+
19+
20+
// 10자리가 넘어가면 감소하는 수가 될 수 없음. 9876543210 => 값이 long이여야함.
21+
for (int i = 1; i <= 10; i++) {
22+
for (int j = 0; j < 10; j++) {
23+
dfs(j, i - 1, i, (long) ((long) j * Math.pow(10, i - 1)));
24+
}
25+
}
26+
27+
if (decreasingNumbers.size() - 1 < N) {
28+
System.out.println(-1);
29+
}else{
30+
System.out.println(decreasingNumbers.get(N));
31+
}
32+
}
33+
34+
private static void dfs(final int curNumber, final int curDigit, final int digit, final long value) {
35+
if (curDigit == 0) {
36+
decreasingNumbers.add((long) value);
37+
return;
38+
}
39+
40+
for (long k = 0; k <= curNumber - 1; k++) {
41+
long newValue = (long) (value + k * Math.pow(10, curDigit - 1));
42+
dfs((int) k, curDigit - 1, digit, newValue);
43+
}
44+
}
45+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package org.example._22week;
2+
3+
import java.io.BufferedReader;
4+
import java.io.IOException;
5+
import java.io.InputStreamReader;
6+
import java.util.*;
7+
8+
public class FriendPalindrome {
9+
10+
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
11+
12+
private static boolean[][] graph;
13+
private static boolean[] visited;
14+
15+
private static int N;
16+
private static int M;
17+
private static int answer;
18+
19+
public static void main(String[] args) throws IOException {
20+
StringTokenizer st = new StringTokenizer(br.readLine());
21+
N = Integer.parseInt(st.nextToken());
22+
M = Integer.parseInt(st.nextToken());
23+
24+
visited = new boolean[N + 1];
25+
graph = new boolean[N + 1][N + 1];
26+
List<Pair> pairs = new ArrayList<>();
27+
28+
for (int i = 0; i < M; i++) {
29+
st = new StringTokenizer(br.readLine());
30+
final int friend1 = Integer.parseInt(st.nextToken());
31+
final int friend2 = Integer.parseInt(st.nextToken());
32+
33+
graph[friend1][friend2] = true;
34+
graph[friend2][friend1] = true;
35+
36+
final Pair pair = new Pair(friend1, friend2);
37+
pairs.add(pair);
38+
}
39+
40+
for (int i = 0; i < M; i++) {
41+
dfs(pairs, i, 2);
42+
}
43+
44+
System.out.println(answer < N ? answer + 1 : answer);
45+
}
46+
47+
private static void dfs(final List<Pair> pairs, final int index, final int count) {
48+
final Pair pair = pairs.get(index);
49+
if (pair.isVisited()) {
50+
return;
51+
}
52+
if (count > answer) {
53+
answer = count;
54+
}
55+
56+
for (int i = index; i < M; i++) {
57+
pair.visit();
58+
dfs(pairs, i, count + 2);
59+
pair.visit();
60+
}
61+
}
62+
63+
private static class Pair {
64+
int friend1;
65+
int friend2;
66+
67+
public Pair(final int friend1, final int friend2) {
68+
this.friend1 = friend1;
69+
this.friend2 = friend2;
70+
}
71+
72+
public void visit() {
73+
visited[friend1] = !visited[friend1];
74+
visited[friend2] = !visited[friend2];
75+
}
76+
77+
public boolean isVisited() {
78+
return visited[friend1] || visited[friend2];
79+
}
80+
}
81+
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package org.example._22week;
2+
3+
import java.util.Scanner;
4+
5+
public class GoodNumberArray {
6+
7+
private static int[] answer;
8+
private static boolean found;
9+
10+
public static void main(String[] args) {
11+
final Scanner sc = new Scanner(System.in);
12+
final int N = sc.nextInt();
13+
14+
for (int i = 1; i <= 3; i++) {
15+
int[] numberArray = new int[N];
16+
numberArray[0] = i;
17+
dfs(N, 1, numberArray);
18+
19+
if (found) {
20+
break;
21+
}
22+
}
23+
}
24+
25+
public static void dfs(int digits, int depth, int[] numberArray) {
26+
if (found) {
27+
return;
28+
}
29+
30+
if (depth == digits) {
31+
found = true;
32+
answer = numberArray.clone();
33+
for (final int digit : answer) {
34+
System.out.print(digit);
35+
}
36+
System.out.println();
37+
return;
38+
}
39+
40+
for (int i = 1; i <= 3; i++) {
41+
numberArray[depth] = i;
42+
if (isInvalidArray(numberArray, i, depth)) {
43+
continue;
44+
}
45+
46+
dfs(digits, depth + 1, numberArray);
47+
}
48+
}
49+
50+
private static boolean isInvalidArray(final int[] numberArray, final int targetValue, final int depth) {
51+
if (numberArray[depth] == numberArray[depth - 1]) {
52+
return true;
53+
}
54+
55+
for (int j = 1; j < depth; j++) {
56+
if (j == depth) {
57+
continue;
58+
}
59+
60+
if (numberArray[j] != targetValue) {
61+
continue;
62+
}
63+
64+
boolean notMatch = false;
65+
for (int i = 1; i < depth - j; i++) {
66+
if (j - i < 0) {
67+
notMatch = true;
68+
break;
69+
}
70+
71+
if (numberArray[j - i] != numberArray[depth - i]) {
72+
notMatch = true;
73+
break;
74+
}
75+
}
76+
if (notMatch) {
77+
continue;
78+
}
79+
80+
return true;
81+
}
82+
83+
return false;
84+
}
85+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package org.example._22week;
2+
3+
import java.util.*;
4+
import java.util.stream.Collectors;
5+
6+
public class NandM12 {
7+
8+
public static void main(String[] args) {
9+
final Scanner sc = new Scanner(System.in);
10+
final int N = sc.nextInt();
11+
final int M = sc.nextInt();
12+
13+
Set<Integer> numbersSet = new HashSet<>();
14+
for (int i = 0; i < N; i++) {
15+
int number = sc.nextInt();
16+
numbersSet.add(number);
17+
}
18+
19+
List<Integer> numbers = new ArrayList<>(numbersSet);
20+
Collections.sort(numbers);
21+
22+
dfs(numbers, M, 0, new ArrayList<>());
23+
}
24+
25+
public static void dfs(List<Integer> numbers, int targetLength, int index, List<Integer> values) {
26+
if (values.size() == targetLength) {
27+
for (final Integer value : values) {
28+
System.out.print(value+" ");
29+
}
30+
System.out.println();
31+
return;
32+
}
33+
34+
for (int i = index; i < numbers.size(); i++) {
35+
values.add(numbers.get(i));
36+
dfs(numbers, targetLength, i, values);
37+
values.remove(values.size() - 1);
38+
}
39+
}
40+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package org.example._22week;
2+
3+
import java.io.BufferedWriter;
4+
import java.io.IOException;
5+
import java.io.OutputStreamWriter;
6+
import java.util.Scanner;
7+
8+
public class NandM4 {
9+
10+
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
11+
12+
public static void main(String[] args) throws IOException {
13+
final Scanner sc = new Scanner(System.in);
14+
final int N = sc.nextInt();
15+
final int M = sc.nextInt();
16+
17+
final int[] arr = new int[M];
18+
dfs(N, M, 1, 0, arr);
19+
bw.flush();
20+
}
21+
22+
public static void dfs(int N, int M, int start, int depth, int[] arr) throws IOException {
23+
if (depth == M) {
24+
for (int i = 0; i < M; i++) {
25+
if (i == M - 1) {
26+
bw.write(arr[i] + "\n");
27+
break;
28+
}
29+
bw.write(arr[i] + " ");
30+
}
31+
return;
32+
}
33+
34+
for (int i = start; i <= N; i++) {
35+
final int[] newArray = arr.clone();
36+
newArray[depth] = i;
37+
dfs(N, M, i, depth + 1, newArray);
38+
}
39+
}
40+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package org.example._22week;
2+
3+
import java.io.*;
4+
import java.util.*;
5+
6+
public class NandM5 {
7+
8+
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
9+
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
10+
private static int[] values;
11+
12+
public static void main(String[] args) throws IOException {
13+
StringTokenizer st = new StringTokenizer(br.readLine());
14+
final int N = Integer.parseInt(st.nextToken());
15+
final int M = Integer.parseInt(st.nextToken());
16+
17+
values = new int[N];
18+
final Map<Integer, Boolean> visited = new HashMap<>();
19+
20+
st = new StringTokenizer(br.readLine());
21+
for (int i = 0; i < N; i++) {
22+
final int value = Integer.parseInt(st.nextToken());
23+
visited.put(value, false);
24+
values[i] = value;
25+
}
26+
27+
values = Arrays.stream(values).sorted().toArray();
28+
int[] arr = new int[M];
29+
30+
dfs(N, M, 0, visited, arr);
31+
bw.flush();
32+
}
33+
34+
public static void dfs(int N, int M, int depth, Map<Integer, Boolean> visited, int[] arr) throws IOException {
35+
if (depth == M) {
36+
for (int i = 0; i < M; i++) {
37+
if (i == M - 1) {
38+
bw.write(arr[i] + "\n");
39+
break;
40+
}
41+
bw.write(arr[i] + " ");
42+
}
43+
return;
44+
}
45+
46+
for (int i = 0; i < N; i++) {
47+
final int value = values[i];
48+
if (visited.get(value)) {
49+
continue;
50+
}
51+
52+
final HashMap<Integer, Boolean> newVisited = new HashMap<>(visited);
53+
newVisited.put(value, true);
54+
final int[] newArray = arr.clone();
55+
newArray[depth] = value;
56+
dfs(N, M, depth + 1, newVisited, newArray);
57+
}
58+
}
59+
}

0 commit comments

Comments
 (0)