Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- MySQL
- 경력직
- IT시스템개발
- 대문자
- 사내시스템
- 첫 리액트
- Vue.js
- 오라클
- e-HR
- 알고리즘
- SBS 개발
- 뷰 리액트
- URL입력
- react
- 첫 React
- 간단 프로젝트
- 백준
- 면접
- 뷰 리액트 비교
- 트리
- 리액트
- SBS 본사
- 뷰
- CompositionAPI
- 자바
- 프로젝트 후기
- 쟈스
- 1차면접
- 백준알고리즘
- 웹 개발 면접 질문
Archives
- Today
- Total
리주의 프로그래밍 공부
[15650] N과 M (2) 본문
다시 풀어보는 백트래킹 문제.
아직까지도 완벽히 숙지하지 못한 것 같다. (바로 N과 M 다른문제 풀러가야지)
우선 이 문제는 visited 배열이 필요가 없다. 왜냐하면 재귀적으로 호출할 때, +1을 해주면 앞에 적힌 수보다 자연스레 커지기 때문이다. 그래서 방문 확인용 배열이 필요가 없다! 중복 체크할 이유가 사라지기 때문이다.
나는 이거를 다른사람이 설명해줄 때에도 이해하는데 꽤나 어려움을 겪었다ㅠㅠ.. (그래도 확실히 해놔야 다른 백트래킹 문제를 풀어볼 수 있으리라 생각했기 때문이다.)
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Scanner;
public class Main {
static int n,m;
static int[] arr;
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
// 임시적으로 출력값을 저장할 배열
arr = new int[m];
dfs(1, 0);
bw.flush();
}
public static void dfs(int a, int cnt) throws IOException {
// dfs 호출 순서를 보고싶다면
System.out.println("a : " + a + " cnt : " + cnt);
// m개만큼 뽑았다면
if(cnt == m) {
for(int i=0; i<m; i++) {
bw.write(arr[i] + " ");
}
bw.write("\n");
// m개만큼 아직 못 뽑았다면
} else {
for(int i=a; i<=n; i++) {
arr[cnt] = i;
dfs(i + 1, cnt + 1);
}
}
}
}
'알고리즘 공부(백준)' 카테고리의 다른 글
[11650] 좌표 정렬하기 (0) | 2021.03.19 |
---|---|
[15652] N과 M (4) (0) | 2021.03.19 |
[15651] N과 M (3) (0) | 2021.03.18 |
[9663] N-Queen (0) | 2021.03.18 |
[2606] 바이러스 (0) | 2021.01.13 |