1. 500 - 브루트 포스
1-1. 일곱 난쟁이 (2309)
import java.io.*;
import java.util.*;
public class P2309_일곱난쟁이 {
static boolean[] visited;
static int[] arr;
static boolean bl;
static int[] answer;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
answer = new int[7];
visited = new boolean[9];
arr = new int[9];
for (int i = 0; i < 9; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
bl = false;
dfs(0, 0, 0);
Arrays.sort(answer);
for (int i = 0; i < 7; i++) {
bw.write(answer[i] + "\n");
}
bw.flush();
bw.close();
br.close();
}
public static void dfs(int depth, int sum, int start) {
if (bl) {
return;
}
if (sum > 100) {
return;
}
if (depth == 7) {
if (sum == 100) {
int index = 0;
for (int i = 0; i < 9; i++) {
if (visited[i]) {
answer[index] = arr[i];
index++;
}
bl = true;
}
}
return;
}
for (int i = start; i < 9; i++) {
if (!visited[i]) {
visited[i] = true;
dfs(depth + 1, sum + arr[i], i);
visited[i] = false;
}
}
}
}
import java.io.*;
import java.util.*;
public class P2309_일곱난쟁이 {
static int[] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
arr = new int[9];
int sum = 0;
for (int i = 0; i < 9; i++) {
arr[i] = Integer.parseInt(br.readLine());
sum += arr[i];
}
Arrays.sort(arr);
int x = -1;
int y = -1;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (sum - arr[i] - arr[j] == 100) {
x = i;
y = j;
}
}
}
for (int i = 0; i < arr.length; i++) {
if (i == x || i == y) {
continue;
}
bw.write(arr[i] + "\n");
}
bw.flush();
bw.close();
br.close();
}
}

2. 510 - 브루트 포스 (N과 M)
2-1. N과 M 1 (15649)
import java.io.*;
import java.util.*;
class NOTE {
static int[] arr;
static boolean[] visited;
static int N, M;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
visited = new boolean[N + 1];
arr = new int[M];
dfs(0);
bw.write(sb + "");
bw.flush();
bw.close();
br.close();
}
public static void dfs(int depth) {
if (depth == M) {
for (int i : arr) {
sb.append(i + " ");
}
sb.append("\n");
return;
}
for (int i = 1; i <= N; i++) {
if (!visited[i]) {
visited[i] = true;
arr[depth] = i;
dfs(depth + 1);
visited[i] = false;
}
}
}
}

2-2. N과 M 2 (15650)
import java.io.*;
import java.util.*;
class NOTE {
static int N, M;
static int[] arr;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
arr = new int[M];
for (int i = 1; i <= N; i++) {
arr[0] = i;
dfs(1, i);
}
bw.write(sb + "");
bw.flush();
bw.close();
br.close();
}
public static void dfs(int depth, int start) {
if (depth == M) {
for (int i : arr) {
sb.append(i + " ");
}
sb.append("\n");
return;
}
for (int i = start + 1; i <= N; i++) {
arr[depth] = i;
dfs(depth + 1, i);
}
}
}

2-3. N과 M 3 (15651)
import java.io.*;
import java.util.*;
class NOTE {
static int N, M;
static int[] arr;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
arr = new int[M];
dfs(0);
bw.write(sb.toString() + "");
bw.flush();
bw.close();
br.close();
}
public static void dfs(int depth) {
if (depth == M) {
for (int i : arr) {
sb.append(i + " ");
}
sb.append("\n");
return;
}
for (int i = 1; i <= N; i++) {
arr[depth] = i;
dfs(depth + 1);
}
}
}

2-4. N과 M 4 (15652)
import java.io.*;
import java.util.*;
class NOTE {
static int N, M;
static int[] arr;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
arr = new int[M];
dfs(0, 1);
bw.write(sb.toString() + "");
bw.flush();
bw.close();
br.close();
}
public static void dfs(int depth, int start) {
if (depth == M) {
for (int i : arr) {
sb.append(i + " ");
}
sb.append("\n");
return;
}
for (int i = start; i <= N; i++) {
arr[depth] = i;
dfs(depth + 1, i);
}
}
}

3. 520 - 브루트 포스 - 순열
3-1. 다음 순열 (10972)
import java.io.*;
import java.util.*;
class P10972_다음순열 {
static int N;
static int[] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
arr = new int[N];
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
if (isPrime()) {
StringBuilder sb = new StringBuilder();
for (int i : arr) {
sb.append(i + " ");
}
sb.append("\n");
bw.write(sb + "");
} else {
bw.write("-1\n");
}
bw.flush();
bw.close();
br.close();
}
public static boolean isPrime() {
int i = arr.length - 1;
while (i > 0 && arr[i - 1] > arr[i]) {
i--;
}
if (i == 0) {
return false;
}
int j = arr.length - 1;
while (arr[i - 1] > arr[j]) {
j--;
}
int temp = arr[i - 1];
arr[i - 1] = arr[j];
arr[j] = temp;
j = arr.length - 1;
while (i < j) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
return true;
}
}

4. 530 - 브루트 포스 - 재귀
4-1. 1, 2, 3 더하기 (9095)
import java.io.*;
import java.util.*;
class P9095_123더하기 {
static int n;
static int[] arr;
static int answer;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
n = Integer.parseInt(br.readLine());
arr = new int[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
answer = 0;
dfs(0);
bw.write(answer + "\n");
}
bw.flush();
br.close();
bw.close();
}
public static void dfs(int sum) {
if (sum > n) {
return;
}
if (sum == n) {
answer++;
return;
}
for (int i = 0; i < 3; i++) {
dfs(sum + arr[i]);
}
}
}

5. 540 - 브루트 포스 - 비트마스크
5-1. 집합 (11723)
import java.io.*;
import java.util.StringTokenizer;
public class P11723_집합 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int S = 0;
int M = Integer.parseInt(br.readLine());
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
String str = st.nextToken();
if (str.equals("all")) S = (1 << 21) - 1;
else if (str.equals("empty")) S = 0;
else {
int num = Integer.parseInt(st.nextToken());
switch (str) {
case "add":
S = S | (1 << num);
break;
case "remove":
S = S & ~(1 << num);
break;
case "check":
bw.write(((S & (1 << num)) != 0 ? 1 : 0) + "\n");
break;
case "toggle":
S = S ^ (1 << num);
break;
}
}
}
bw.close();
}
}
