COBI-98
은로그
COBI-98
  • 은로그 (79)
    • Back-End (1)
      • Java (5)
      • Spring (16)
      • DB (1)
      • 알고리즘 (7)
      • ETC (2)
    • 개발 일기 (0)
    • 회고 (4)
    • Project (1)
      • 협업프로젝트 (7)
      • 국비프로젝트 (2)
    • Web (2)
      • Server (2)
    • Git (2)
    • CS (0)
    • 코딩테스트 (24)
      • 백준 (17)
      • 프로그래머스 (7)
    • 우아한 테크코스 (5)

블로그 메뉴

  • ✨깃허브
  • 홈
  • 방명록

공지사항

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
COBI-98

은로그

[백준 / Java] 15651번 N과 M (3)
코딩테스트/백준

[백준 / Java] 15651번 N과 M (3)

2023. 1. 11. 21:47

사용한 알고리즘(백트래킹)

https://cobi-98.tistory.com/22

 

[필수 알고리즘] 재귀호출 기본 -백트래킹(Backtracking)

백트래킹 알고리즘 백트래킹(Backtracking) 위 단어를 그대로 해석하고 이해하면 된다.좀더 알고리즘적으로 설명하자면, 어떤 노드의 '유망성'을 판단한 뒤, 해당 노드가 유망하지 않다면 부모 노드

cobi-98.tistory.com

 

🔒 15651번 N과 M (3)

✔ 문제 설명

🚩 요구사항 분석

  • 1부터 N까지 자연수 중에서 M개를 고른 수열
  •  중복해서 조합 할 수 있다.

 

🔑 문제풀이

자연수 N과 M을 정의하기위해 BufferedReader 을 사용하여 StringTokenizer로 값을 전역변수 지정하였다.

 

중복을 허용하기에  boolean으로 방문 기록을 담을 필요없이 depth를 통해 재귀가 깊어질 때마다  (DMBackTracking함수) depth를 1씩 증가시킨다.

더이상 탐색할 자식 노드가 없다면(M과 같아지면) 더이상 재귀를 호출하지 않고 탐색과정 중 값을 담았던 arr 배열을 출력해주고 return 해준다.

 

다음과 같이 출력이 많은 String 의 경우 StringBuilder을 사용하여 효율성을 높이는 것을 활용하였다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main{

    public static int N;
    public static int M;
    public static int [] arr;
    public 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());

        arr = new int[M];

        NMBacktracking3(0);
        System.out.println(sb);
    }

    public static void NMBacktracking3(int depth){
        if(depth == M){
            for (int value : arr) {

                sb.append(value).append(' ');
            }
            sb.append('\n');
            return;
        }

        for (int i = 0; i < N; i++) {
                arr[depth] = i+1;
                NMBacktracking3(depth+1);
        }
    }
}

 

'코딩테스트 > 백준' 카테고리의 다른 글

[백준 / Java] 14889번 스타트와 링크  (0) 2023.01.11
[백준 / Java] 15652번 N과 M (4)  (0) 2023.01.11
[백준 / Java] 14888번 연산자 끼워넣기  (0) 2023.01.11
[백준 / Java] 9663번 N-Queen  (0) 2023.01.11
[백준 / Java] 15650번 N과 M (2)  (0) 2023.01.11
    '코딩테스트/백준' 카테고리의 다른 글
    • [백준 / Java] 14889번 스타트와 링크
    • [백준 / Java] 15652번 N과 M (4)
    • [백준 / Java] 14888번 연산자 끼워넣기
    • [백준 / Java] 9663번 N-Queen
    COBI-98
    COBI-98
    배운 것을 응용하기 위해 기록하는 것을 선호하며 백엔드를 공부하고 있습니다.

    티스토리툴바