leecom116

제이의 기술 블로그
  • Print (216)
    • Frontend (29)
      • React (3)
      • HTML, CSS (8)
      • JavaScript (11)
      • JQuery (4)
      • JSP (2)
    • Backend (59)
      • Java (31)
      • Spring (11)
      • Spring Boot (0)
      • Python (1)
      • Node.js (1)
      • C, C++ (12)
      • Linux (2)
    • Database (3)
      • MariaDB (0)
      • Oracle (0)
      • MySQL (0)
    • Project (1)
    • Algorithm (67)
      • 백준 (43)
      • 프로그래머스 (0)
      • 이코테 (6)
      • 코드업 (17)
    • Tool (2)
      • Git (1)
      • Log (1)
    • CS (4)
    • Tech Interview (18)
      • Java (9)
      • Web (9)
    • Study (31)
      • 인프런 (3)
      • 정보처리기사 (8)
      • util (4)
      • 쌍용 (14)

깃허브

    https://github.com/leecom116

«   2025/07   »
일 월 화 수 목 금 토
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

최근 글

인기 글

블로그 메뉴

  • 홈
  • 태그
  • 방명록

태그

  • char
  • 정보공학 방법론
  • 코드업 기초
  • 웹 개발 부트캠프
  • CSS
  • 산술 변환
  • 메타포어
  • 델파이 기법
  • C언어 프로젝트
  • 논리 연산자
  • 나선형 모델
  • 나도코딩
  • static메서드
  • Web Developer
  • man month
  • 자바 예외 처리
  • 웹 개발
  • c언어
  • 자바의 정석
  • 자바 인터페이스
  • 객체 배열
  • JSP
  • 의존성 주입
  • 코드업 2차원 배열
  • 웹개발
  • 코드업 기초100제
  • HTML
  • Associate
  • 코드업
  • 참조형 변수

최근 댓글

hELLO · Designed By 정상우.
leecom116
Algorithm/백준

백준 15649 (N과 M (1))

2024. 3. 24. 13:52
import java.io.*;
import java.util.StringTokenizer;

public class Main {

    public static int[] arr;
    public static boolean[] visit;

    public static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        arr = new int[M]; // 임시 순열 값
        visit = new boolean[N]; // 노드 방문 여부
        dfs(N, M, 0);
        bw.flush();
        bw.close();
    }

    public static void dfs(int N, int M, int depth) throws IOException {
        if(depth == M) {
            for(int val : arr) {
                bw.write(val + " ");
            }
            bw.write("\n");
            return;
        }

        /**
         * 노드 방문여부에 따라 재귀 함수 처리
         * ex) visit[0](=1) = true일 경우,
         *     재귀 함수가 돌면서 1이 아닌 값들을 저장
         */

        for(int i=0; i<N; i++) {
            if(! visit[i]) {
                visit[i] = true;
                arr[depth] = i + 1;
                dfs(N, M, depth + 1);
                // ex) i가 0일 경우 arr[0] = 1, visit[0] = true이므로 arr[1] = 2 출력
                visit[i] = false; // 다음 순열 계산을 위해 초기화
            }
        }
    }
}

 

저작자표시 (새창열림)

'Algorithm > 백준' 카테고리의 다른 글

[백준 2579] 계단 오르기(JAVA)  (4) 2025.01.04
[2606] 바이러스(Java)  (0) 2024.12.12
백준 2667 (단지번호붙이기)  (0) 2024.03.21
백준 11047 (동전 0)  (0) 2024.01.07
백준 11399 (ATM)  (0) 2024.01.01
    'Algorithm/백준' 카테고리의 다른 글
    • [백준 2579] 계단 오르기(JAVA)
    • [2606] 바이러스(Java)
    • 백준 2667 (단지번호붙이기)
    • 백준 11047 (동전 0)
    leecom116
    leecom116

    티스토리툴바