[BOJ/Java] 15649: N과 M (1)

2025. 5. 14. 21:55·Problem Solving/BOJ
문제

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

자연수 N, M이 주어지면, 1~N까지의 자연수 중에서 중복 없이 M개를 고른 수열을 반환해야 한다.

순열을 찾는 문제다.

순열은 순서를 고려하여 고른 경우의 수를 의미한다. 반면, 조합은 순서에 상관없이 요소를 고른 경우의 수를 의미한다.

풀이

전형적인 백트래킹 문제다.

💡 백트래킹(Backtracking): 모든 경우의 수를 탐색하되, 유망(promising)하지 않은 경우의 수를 가지치기(pruning)하면서 탐색을 줄이는 알고리즘 기법
import java.io.*;
import java.util.*;

public class Main {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer st;
    static List<Integer> answer = new ArrayList<>();
    static StringBuilder sb = new StringBuilder();
    static int n, m;
    static boolean[] visited;

    public static void main(String[] args) throws IOException {
        st = new StringTokenizer(br.readLine());
        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());

        visited = new boolean[n + 1];
        backtracking(0);

        System.out.println(sb);
    }

    static void backtracking(int depth) {
        if (depth == m) {
            for (int i = 0; i < m; i++) {
                sb.append(answer.get(i) + " ");
            }
            sb.append("\n");
            return;
        }
        
        for (int i = 1; i <= n; i++) {
            if (!visited[i]) {
               visited[i] = true;
               answer.add(i);
               backtracking(depth + 1);
               answer.remove(answer.size() - 1);
               visited[i] = false;
            }
        }
    }
}

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ/Java] 17951: 흩날리는 시험지 속에서 내 평점이 느껴진거야  (0) 2025.05.16
[BOJ/Java] 23288: 주사위 굴리기 2  (0) 2025.05.16
[BOJ/Java] 5549: 행성 탐사  (0) 2025.05.15
[BOJ/Java] 18113: 그르다 김가놈  (0) 2025.05.14
[BOJ/Java] 20955: 민서의 응급 수술  (0) 2025.05.14
'Problem Solving/BOJ' 카테고리의 다른 글
  • [BOJ/Java] 23288: 주사위 굴리기 2
  • [BOJ/Java] 5549: 행성 탐사
  • [BOJ/Java] 18113: 그르다 김가놈
  • [BOJ/Java] 20955: 민서의 응급 수술
friend5hip
friend5hip
개발 관련 지식이나 기록을 남기고 있습니다.
  • friend5hip
    friend5hip
    friend5hip
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • 컴퓨터공학 (2)
        • 자료구조 (0)
        • 알고리즘 (1)
        • 데이터베이스 (1)
      • Problem Solving (42)
        • BOJ (25)
        • 프로그래머스 (15)
      • 언어 (2)
        • JavaScript (2)
      • 라이브러리 (12)
        • React (12)
      • 개발 (2)
      • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    시뮬레이션
    코드트리
    intersection observer
    그리디
    구간 합
    소수 판별
    dp
    삼성 sw 역량테스트
    정렬
    구현
    N과 M
    문자열
    BFS
    매개 변수 탐색
    집합
    백준
    수학
    dfs
    vite
    투 포인터
    순열
    백트래킹
    JavaScript
    완전 탐색
    java
    누적 합
    프로그래머스
    react
    이분 탐색
    맵
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
friend5hip
[BOJ/Java] 15649: N과 M (1)
상단으로

티스토리툴바