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
- 막무가내
- 막내의막무가내
- 막내의 막무가내
- 막내의막무가내 안드로이드
- 막내의 막무가내 알고리즘
- 안드로이드 Sunflower 스터디
- 막내의막무가내 알고리즘
- 막내의막무가내 코틀린 안드로이드
- 막내의막무가내 코볼 COBOL
- 프로그래머스 알고리즘
- 부스트코스
- 막내의막무가내 코틀린
- 주엽역 생활맥주
- 프래그먼트
- 막내의막무가내 안드로이드 코틀린
- 막내의막무가내 목표 및 회고
- 부스트코스에이스
- 막내의막무가내 플러터 flutter
- 막내의막무가내 프로그래밍
- 막내의막무가내 안드로이드 에러 해결
- 안드로이드 sunflower
- 주택가 잠실새내
- 막내의막무가내 rxjava
- 막내의막무가내 일상
- 안드로이드
- 막내의막무가내 플러터
- flutter network call
- 막내의막무가내 SQL
- 2022년 6월 일상
- Fragment
Archives
- Today
- Total
막내의 막무가내 프로그래밍 & 일상
[알고리즘] 백준 15651 N과 M (3) -백트랙킹- 자바 코틀린 본문
728x90
https://www.acmicpc.net/problem/15651
백트랙킹 문제를 이어서 풀어봤습니다.
이번에는 각 자리수에 중복된 숫자가 와도 되는 오름차순 출력 조건입니다.
current로 재귀를 돌려야하고 isVisited 방문했는지 안했는지는 이번에는 필요없던게 포인트였습니다.
그리고 처음에 풀어서 제출했는데 시간초과가 났습니다.
그래서 출력부분을 StringBuilder로 바꿔서 해결했습니다. (Writer 까지는 필요없는것 같습니다.)
import java.util.Scanner; public class Main { static boolean[] isVisited; static int[] num; static int n; static int m; static StringBuilder sb = new StringBuilder(); 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); System.out.println(sb); } static void dfs(int current) { if (current > m) { for (int i = 1; i <= m; i++) { sb.append(num[i]).append(" "); } sb.append("\n"); return; } for (int i = 1; i <= n; i++) { num[current] = i; dfs(current + 1); } } }
[2020-09-30]
[Java]
import java.util.Scanner; public class Main { static boolean[] isVisited; static int[] num; static int n; static int m; static StringBuilder sb = new StringBuilder(); 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); System.out.println(sb); } static void dfs(int current) { if (current > m) { for (int i = 1; i <= m; i++) { sb.append(num[i]).append(" "); } sb.append("\n"); return; } for (int i = 1; i <= n; i++) { num[current] = i; dfs(current + 1); } } }
[Kotlin]
import java.util.* internal var isVisited: BooleanArray? = null internal var num: IntArray? = null internal var n: Int = 0 internal var m: Int = 0 internal var sb = StringBuilder() 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) println(sb) } internal fun dfs(current: Int) { if (current > m) { for (i in 1..m) { sb.append(num!![i]).append(" ") } sb.append("\n") return } for (i in 1..n) { num!![current] = i dfs(current + 1) } }
댓글과 공감은 큰 힘이 됩니다. 감사합니다. !!
728x90
'알고리즘 > DFS, BFS, 시뮬, 백트래킹' 카테고리의 다른 글
[알고리즘] 백준 9663 N-Queen -백트랙킹- 자바 코틀린 (0) | 2020.03.25 |
---|---|
[알고리즘] 백준 15652 N과 M (4) -백트랙킹- 자바 코틀린 (0) | 2020.03.23 |
[알고리즘] 백준 15650 N과 M (2) -백트랙킹- 자바 코틀린 (0) | 2020.03.23 |
[알고리즘] 백준 N과 M (1) -백트랙킹- 자바 코틀린 (0) | 2020.03.20 |
[알고리즘] 백준 7576 토마토 -bfs, dfs- (0) | 2020.03.06 |
Comments