개발후라이
개발후라이
개발후라이
  • 분류 전체보기 (285)
    • Web Front End (74)
      • Javascript & Typescript (26)
      • React (11)
      • Vue (4)
      • Nodejs (1)
      • HTML (6)
      • CSS (7)
      • HTTP (6)
      • 책 - Review (8)
    • TIL (0)
    • Problem Solved (135)
      • 알고리즘 (4)
      • BOJ (67)
      • Programmers (8)
      • HackerRank (33)
      • LeetCode (23)
    • 회고 (4)
      • 오늘의 회고 (16)
      • 주간 회고 (15)
      • 월간 회고 (7)
      • WakaTime (9)
    • Git (3)
    • 기타 (15)
      • 취업 (5)
      • 자격증 (1)

블로그 메뉴

  • GitHub
  • LinkedIn
  • 홈

인기 글

태그

  • 노개북
  • 프론트엔드
  • 개발자
  • 릿코드
  • JavaScript
  • 회고
  • TypeScript
  • 노마드북클럽
  • 오늘의회고
  • 자바스크립트

최근 댓글

최근 글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
개발후라이

개발후라이

[BOJ][Java] 15649번 - N과 M (1)
Problem Solved/BOJ

[BOJ][Java] 15649번 - N과 M (1)

2019. 12. 20. 22:53
반응형

문제

백준 15649번 문제: N과 M (1)

N과 M 시리즈 문제 해설 보러가기

  • [BOJ][Java] 15649번 - N과 M (1)
  • [BOJ][Java] 15650번 - N과 M (2)
  • [BOJ][Java] 15651번 - N과 M (3)
  • [BOJ][Java] 15652번 - N과 M (4)

자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.

  • 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열

문제 설명

DFS(깊이 우선 탐색)를 사용해 백트래킹을 진행했다.

  • DFS: 루트 노드(혹은 다른 임의의 노드)에서 시작해서 다음 분기(branch)로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방법, 대표적인 완전 탐색 방법, DFS 는 모든곳을 방문하기 때문에 굳이 목표지점이 있지 않는 경로로 빠져서 비효율적인 결과 초래 가능
  • 백트래킹: DFS에 가지치기 (Pruning) 를 통해 가도되지 않는 루트는 고려하지 않고 탐색하는 완전탐색 기법

  • 참고:
    [알고리즘] 깊이 우선 탐색(DFS)이란
    [알고리즘] 백트래킹 (Backtracking) 알고리즘
    [실전 알고리즘] 0x07강 - 백트래킹, 시뮬레이션

성공 코드

import java.util.Scanner;

public class Main {
    static int[] arr;
    static boolean[] visit;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();    // 1부터 n까지
        int m = sc.nextInt();    // 중복 없이 m개를 고르기
        sc.close();
        arr = new int[m];
        visit = new boolean[n+1];        
        dfs(n, m, 0);
    }

    public static void dfs(int n, int m, int d) {
        if (d == m) {
            for (int s : arr)
                System.out.print(s + " ");
            System.out.println("");
        } else {
            for (int i = 1; i <= n; i++) {
                if (!visit[i]) {
                    visit[i] = true;
                    arr[d] = i;
                    dfs(n, m, d+1);
                    visit[i] = false;
                }
            }
        }
    }
}
반응형
저작자표시 (새창열림)
    'Problem Solved/BOJ' 카테고리의 다른 글
    • [BOJ][Java] 2441번 - 별 찍기 - 4
    • [BOJ][Java] 2440번 - 별 찍기 - 3
    • [BOJ][Java] 10814번 - 나이순 정렬
    • [BOJ][Java] 1181번 - 단어 정렬
    개발후라이
    개발후라이
    어제보다 오늘 발전하기 위한 공간 https://github.com/choisohyun

    티스토리툴바