일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 백트래킹
- 가중치없는그래프
- 프로그래머스
- 재귀
- 멘딕스
- git
- 그래프
- 반효경교수님
- 정렬
- 집합
- 트리
- dfs
- Sort
- 매개변수 탐색
- domain model
- Mendix
- Recursion
- Bruteforce
- lcap
- 자바
- 이분탐색
- 스택
- SQL
- 해시맵
- 알고리즘
- microflow
- 자료구조
- 완전탐색
- algorithm
- MySQL
- Today
- Total
mondegreen
[240502] 알고리즘 리부트 58일차 - 백준 N과 M 시리즈 자바 본문
N과 M 시리즈
N과 M (1) (각기 다른 수) 1부터 N까지의 수 중 중복 없도록 M개 고른 수열
N과 M (2) (각기 다른 수) 1부터 N까지의 수 중 중복 없도록 M개 고르는데 각 원소가 오름차순인 수열
N과 M (3) (각기 다른 수) 1부터 N까지의 수 M개 고른 수열(원소 중복 가능)
N과 M (4) (각기 다른 수) 1부터 N까지의 수 M개 고르는 데 원소 중복 가능하나 각 원소가 같거나 오름차순인 수열
N과 M (5) (각기 다른 수) 주어진 수 중 중복 없도록 M개 고른 수열
N과 M (6) (각기 다른 수) 주어진 수 중 중복 없도록 M개 고르는데 각 원소가 오름차순인 수열
N과 M (7) (각기 다른 수) 주어진 수 중 M개 고른 수열(원소 중복 가능)
N과 M (8) (각기 다른 수) 주어진 수 중 M개 고르는 데 원소 중복 가능하나 각 원소가 같거나 오름차순인 수열
N과 M (9) (동일 숫자 존재) 주어진 수 중 M개 고르는 데 원소 중복 불가, 동일 숫자인 원소는 중복 가능한 수열
N과 M (10) (동일 숫자 존재) 주어진 수 중 M개 고르는 데 원소 중복 불가, 동일 숫자인 원소는 중복 가능하나 각 원소가 같거나 오름차순인 수열
N과 M (11) (동일 숫자 존재) 주어진 수 중 M개 고른 수열 (동일한 수열은 출력하지 않음)
N과 M (12) (동일 숫자 존재) 주어진 수 중 M개 고르는 데 원소 중복가능하나 각 원소가 같거나 오름차순인 수열(동일한 수열은 출력하지 않음)
이 문제를 풀면서 적용한 조건은
1) 방문 배열
2) 동일한 순서에 배정되는 직전에 뽑은 수(이미 뽑은 수열인지 확인)
3) 직전에 뽑은 수(앞 원소)
N과 M (9)
(동일 숫자 존재) 주어진 수 중 M개 고르는 데 원소 중복 불가, 동일 숫자인 원소는 중복 가능한 수열
package BaekJoon.recursion;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Scanner;
public class BJ15663 {
public static int n, m;
public static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static int[] arr;
public static boolean[] visited;
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
arr = new int[n];
visited = new boolean[n];
for (int i = 0; i < n; i++) arr[i] = sc.nextInt();
Arrays.sort(arr);
int[] ans = new int[m];
getNum(ans, 0);
bw.flush();
}
private static void getNum(int[] ans, int curr) throws IOException {
if (curr == m) {
for (int i : ans) bw.write(i + " ");
bw.write("\n");
//System.out.println("출력했어");
return;
}
int tmp = 0;
//System.out.println("tmp는 다시 0");
for (int i = 0; i < n; i++) {
//System.out.println("tmp(1): " + tmp); //1 7 9 9
if (visited[i]) {
//System.out.println("방문했던 애라서 지나감: " + arr[i]);
continue;
}
if ((tmp == arr[i])) {
//System.out.println("담았던 애라서 지나감: " + arr[i]);
continue;
}
ans[curr] = arr[i];
tmp = arr[i];
//System.out.println("tmp(2): " + tmp);
visited[i] = true;
getNum(ans, curr + 1);
visited[i] = false;
}
}
}
N과 M (10)
(동일 숫자 존재) 주어진 수 중 M개 고르는 데 원소 중복 불가, 동일 숫자인 원소는 중복 가능하나 각 원소가 같거나 오름차순인 수열
package BaekJoon.recursion;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Scanner;
public class BJ15664 {
public static int n, m;
public static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static int[] arr;
public static boolean[] visited;
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
arr = new int[n];
visited = new boolean[n];
for (int i = 0; i < n; i++) arr[i] = sc.nextInt();
Arrays.sort(arr);
int[] ans = new int[m];
getNum(ans, 0);
bw.flush();
}
private static void getNum(int[] ans, int curr) throws IOException {
if (curr == m) {
for (int i : ans) bw.write(i + " ");
bw.write("\n");
//System.out.println("출력했어");
return;
}
int tmp = 0;
//System.out.println("tmp는 다시 0");
for (int i = 0; i < n; i++) {
//System.out.println("tmp(1): " + tmp); //1 7 9 9
if (visited[i] || (curr != 0 && ans[curr - 1] > arr[i])) {
//System.out.println("방문했던 애라서 지나감: " + arr[i]);
continue;
}
if ((tmp == arr[i])) {
//System.out.println("담았던 애라서 지나감: " + arr[i]);
continue;
}
ans[curr] = arr[i];
tmp = arr[i];
//System.out.println("tmp(2): " + tmp);
visited[i] = true;
getNum(ans, curr + 1);
visited[i] = false;
}
}
}
N과 M (11)
(동일 숫자 존재) 주어진 수 중 M개 고른 수열 (동일한 수열은 출력하지 않음)
package BaekJoon.recursion;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Scanner;
public class BJ15665 {
public static int n, m;
public static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static int[] arr;
public static boolean[] visited;
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
arr = new int[n];
visited = new boolean[n];
for (int i = 0; i < n; i++) arr[i] = sc.nextInt();
Arrays.sort(arr);
int[] ans = new int[m];
getNum(ans, 0);
bw.flush();
}
private static void getNum(int[] ans, int curr) throws IOException {
if (curr == m) {
for (int i : ans) bw.write(i + " ");
bw.write("\n");
return;
}
int tmp = 0;
for (int i = 0; i < n; i++) {
if ((tmp == arr[i])) {
continue;
}
ans[curr] = arr[i];
tmp = arr[i];
getNum(ans, curr + 1);
}
}
}
N과 M (12)
(동일 숫자 존재) 주어진 수 중 M개 고르는 데 원소 중복가능하나 각 원소가 같거나 오름차순인 수열(동일한 수열은 출력하지 않음)
package BaekJoon.recursion;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Scanner;
public class BJ15666 {
public static int n, m;
public static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static int[] arr;
public static boolean[] visited;
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
arr = new int[n];
visited = new boolean[n];
for (int i = 0; i < n; i++) arr[i] = sc.nextInt();
Arrays.sort(arr);
int[] ans = new int[m];
getNum(ans, 0);
bw.flush();
}
private static void getNum(int[] ans, int curr) throws IOException {
if (curr == m) {
for (int i : ans) bw.write(i + " ");
bw.write("\n");
return;
}
int tmp = 0;
for (int i = 0; i < n; i++) {
if (curr != 0 && ans[curr - 1] > arr[i]) {
continue;
}
if ((tmp == arr[i])) {
continue;
}
ans[curr] = arr[i];
tmp = arr[i];
getNum(ans, curr + 1);
}
}
}
'알고리즘 풀이 및 리뷰 > 백준' 카테고리의 다른 글
[240528] 알고리즘 리부트 61일차 - 백준 2630 자바 (0) | 2024.05.29 |
---|---|
[240408] 알고리즘 리부트 45일차 - 백준 5568 자바 (0) | 2024.04.08 |
[240319] 알고리즘 리부트 33일차 - 백준 2792 자바 (1) | 2024.03.19 |
[240310] 알고리즘 리부트 28일차 - 백준 2143 자바 (0) | 2024.03.11 |
[240303] 알고리즘 리부트 23일차 - 백준 10836 자바 (0) | 2024.03.04 |