250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 막내의막무가내
- 막내의막무가내 코볼 COBOL
- 막내의 막무가내
- 프래그먼트
- 막내의막무가내 rxjava
- 막내의막무가내 SQL
- 부스트코스
- 막내의막무가내 코틀린 안드로이드
- 안드로이드 sunflower
- 주택가 잠실새내
- 막내의 막무가내 알고리즘
- 부스트코스에이스
- 막무가내
- 막내의막무가내 안드로이드 에러 해결
- 막내의막무가내 알고리즘
- 막내의막무가내 안드로이드
- 막내의막무가내 목표 및 회고
- 2022년 6월 일상
- Fragment
- 주엽역 생활맥주
- 막내의막무가내 플러터 flutter
- 막내의막무가내 안드로이드 코틀린
- 막내의막무가내 플러터
- 막내의막무가내 코틀린
- 안드로이드 Sunflower 스터디
- 프로그래머스 알고리즘
- 막내의막무가내 일상
- 안드로이드
- flutter network call
- 막내의막무가내 프로그래밍
Archives
- Today
- Total
막내의 막무가내 프로그래밍 & 일상
[알고리즘] 백준 15650 N과 M (2) -백트랙킹- 자바 코틀린 본문
728x90
https://www.acmicpc.net/problem/15650
저번에 N과 M (1) 백트랙킹에 이어서 그 다음단계의 백트랙킹 문제를 풀어보았습니다.
저번 문제와 차이점은 오름차순으로 안된 수는 출력하면 안되는 조건이 붙었습니다. (저번 문제는 모든 경우의 수를 오름차순으로 출력시키는 문제였습니다.)
함수에 이전 값을 전달해서 현재숫자와 비교를 하는 로직을 추가했습니다
저번 문제를 이해하고 푸니 이번에는 쉽게 풀린 것 같습니다.
import java.util.Scanner;
class Main {
static int N;
static int M;
static boolean[] isVisited;
static int[] num;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
M = sc.nextInt();
isVisited = new boolean[N + 1];
num = new int[N + 1];
dfs(0, -1);
}
static void dfs(int current, int prevNum) {
if (current == M) {
for (int i = 0; i < M; i++) {
System.out.print(num[i] + " ");
}
System.out.println();
} else {
for (int i = 1; i <= N; i++) {
if (isVisited[i] == true) {
continue;
}
// 이전 값과 비교
if (prevNum > i) {
continue;
}
isVisited[i] = true;
num[current] = i;
dfs(current + 1, num[current]);
isVisited[i] = false;
}
}
}
}
[2020-09-30 복습]
[java]
import java.util.Scanner;
public class Main {
static boolean[] isVisited;
static int[] num;
static int n;
static int m;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
isVisited = new boolean[m + 1];
num = new int[m + 1];
dfs(1, -1);
}
static void dfs(int current, int prevNum) {
if (current > m) {
for (int i = 1; i <= m; i++) {
System.out.print(num[i] + " ");
}
System.out.println();
return;
}
for (int i = 1; i <= n; i++) {
if (isVisited[current]) {
continue;
}
if (prevNum >= i) {
continue;
}
isVisited[current] = true;
num[current] = i;
prevNum = i;
dfs(current + 1, prevNum);
isVisited[current] = false;
}
}
}
[kotlin]
import java.util.*
internal var isVisited: BooleanArray? = null
internal var num: IntArray? = null
internal var n: Int = 0
internal var m: Int = 0
fun main(args: Array<String>) {
val sc = Scanner(System.`in`)
n = sc.nextInt()
m = sc.nextInt()
isVisited = BooleanArray(m + 1)
num = IntArray(m + 1)
dfs(1, -1)
}
internal fun dfs(current: Int, prevNum: Int) {
var prevNum = prevNum
if (current > m) {
for (i in 1..m) {
print(num!![i].toString() + " ")
}
println()
return
}
for (i in 1..n) {
if (isVisited!![current]) {
continue
}
if (prevNum >= i) {
continue
}
isVisited!![current] = true
num?.set(current, i)
prevNum = i
dfs(current + 1, prevNum)
isVisited!![current] = false
}
}
댓글과 공감은 큰 힘이 됩니다. 감사합니다. !
728x90
'알고리즘 > DFS, BFS, 시뮬, 백트래킹' 카테고리의 다른 글
[알고리즘] 백준 15652 N과 M (4) -백트랙킹- 자바 코틀린 (0) | 2020.03.23 |
---|---|
[알고리즘] 백준 15651 N과 M (3) -백트랙킹- 자바 코틀린 (0) | 2020.03.23 |
[알고리즘] 백준 N과 M (1) -백트랙킹- 자바 코틀린 (0) | 2020.03.20 |
[알고리즘] 백준 7576 토마토 -bfs, dfs- (0) | 2020.03.06 |
[알고리즘] 백준 2178 미로 탐색 -bfs, dfs- 자바 코틀린 (0) | 2020.03.05 |
Comments