[BOJ] 15649: N과 M(1) (JAVA)

2024. 3. 20. 14:07·Algorithm/BFS & DFS

문제

https://www.acmicpc.net/problem/15649

 

여담

DFS & 재귀에 약해서 살짝 헷갈렸다. 관련 문제들이 많은데 풀어보면서 좀 익혀야 할 듯!

 

풀이

DFS와 백트래킹을 사용해서 풀이하면 된다. 이때, 같은 수는 두 번 사용할 수 없으므로 used 배열을 추가해서 해당 수의 사용 여부를 기록해야 한다. 

 

각 수에 대해 탐색을 수행한 뒤, 사용 처리를 취소하지 않으면 해당 수를 더 이상 사용할 수 없다. 즉, 모든 경우의 수를 다 탐색할 수 없다.

 

따라서 탐색이 끝나면 사용했던 수의 사용 처리를 무조건 취소(used[i] = false)해야 한다. 

 

코드

import java.util.*;
import java.io.*;

public class Main {
    static int N, M;
    static boolean[] used;
    static int[] answer;
    static StringBuilder sb = new StringBuilder();
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        used = new boolean[N + 1];
        answer = new int[M];
        dfs(0);
        System.out.println(sb.toString());
    }

    public static void dfs(int depth) {
        if (depth == M) {
            for (int a : answer) {
                sb.append(a).append(" ");
            }
            sb.append("\n");
            return;
        }

        for (int i = 1; i <= N; i++) {
            if (!used[i]) { // 아직 사용하지 않았다면
                used[i] = true; // 사용 처리
                answer[depth] = i; // 해당 자리에 값 기록 
                dfs(depth + 1); // DFS 탐색
                used[i] = false; // 탐색 후, 사용 처리 취소 (백트래킹)
            }
        }
    }
}

'Algorithm > BFS & DFS' 카테고리의 다른 글

[BOJ] 5427: 불 (JAVA)  (0) 2024.03.20
[BOJ] 16918: 봄버맨 (JAVA)  (0) 2024.03.20
[BOJ] 1303: 전쟁 - 전투 (JAVA)  (0) 2024.03.20
[BOJ] 3184: 양 (JAVA)  (0) 2024.03.20
[BOJ] 1743: 음식물 피하기 (JAVA)  (0) 2024.03.20
'Algorithm/BFS & DFS' 카테고리의 다른 글
  • [BOJ] 5427: 불 (JAVA)
  • [BOJ] 16918: 봄버맨 (JAVA)
  • [BOJ] 1303: 전쟁 - 전투 (JAVA)
  • [BOJ] 3184: 양 (JAVA)
hjin28
hjin28
  • hjin28
    끄적이는 기록장
    hjin28
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 홈
    • 태그
    • GitHub
    • 이전 블로그
    • 분류 전체보기
      • TIL
      • Frontend
      • Backend
      • Infra
      • Java
        • 이것이 자바다
      • CS
        • 컴퓨터구조
        • 운영체제
        • 네트워크
        • 데이터베이스
      • Algorithm
        • 자료구조
        • 시뮬레이션
        • 완전탐색
        • BFS & DFS
        • DP
        • 그리디
        • 최단경로
        • 유니온파인드
        • 위상정렬
        • 정렬
        • SQL
      • ETC
  • 최근 글

  • 태그

    til
    백준
    SQL
    vue
    JWT
    그리디
    자바
    투포인터
    DFS
    비트마스킹
    위상정렬
    다익스트라
    구현
    springsecurity
    ec2
    DP
    유니온파인드
    덱
    완전탐색
    최단경로
    java
    컴퓨터구조
    자료구조
    Spring
    websocket
    다이나믹프로그래밍
    Programmers
    백트래킹
    SWEA
    BFS
  • hELLO· Designed By정상우.v4.10.1
hjin28
[BOJ] 15649: N과 M(1) (JAVA)
상단으로

티스토리툴바