package org.example.알고리즘.주사위놀이하는함수;
import java.io.*;
import java.text.MessageFormat;
import java.util.Arrays;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* packageName : org.example.알고리즘.주사위놀이하는함수
* fileName : Main
* author : ipeac
* date : 2023-09-22
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023-09-22 ipeac 최초 생성
*/
public class Main {
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
static int n;
public static void main(String[] args) {
try (
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
) {
n = Integer.parseInt(br.readLine());
Number[] numbers = new Number[n];
backTracking(n, 1,numbers);
bw.flush();
bw.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
public static void backTracking(int cnt, int start,Number[] numbers) {
Objects.requireNonNull(numbers, "numbers must not be null");
try {
if (cnt == 0) {
String joined = joined(numbers);
bw.write(joined);
bw.newLine(); // 줄바꿈
return;
}
for (int i = start; i <= 6; i++) {
numbers[n - cnt] = new Number(i);
backTracking(cnt - 1, i,numbers);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private static String joined(Number[] numbers) {
return Arrays.stream(numbers)
.map(number -> String.valueOf(number.value))
.collect(Collectors.joining("-"));
}
public static class Number {
int value;
public Number(int value) {
if (!(value >= 1 && value <= 6)) {
String errMsg = MessageFormat.format("주사위의 값은 1~6 사이의 값이어야 합니다. 입력값: {0}", value);
throw new IllegalArgumentException(errMsg);
}
this.value = value;
}
@Override
public String toString() {
return String.valueOf(value);
}
}
}
- 기본적인 백트래킹 문제이다.
Number
클래스는- 단순히 주사위의 숫자값을 제한하기 위한 용도
- backTracking 함수
- 주사위를 굴리는 모든 가능한 조합을 탐색
- joined
- Number 배열의 값을 “-” delimeter 로 출력하기 위함
- 주사위를 n 번 굴리는 경우
- 만약 주사위를 굴렸다면 cnt == 0
- 해당 조합의 경우를 출력
- cnt==0 이 아니라면, 주사위를 시작점부터 6까지 숫자의 모든 값을 설정
- 나머지 주사위 조합을 재귀적으로 탐색
- 만약 주사위를 굴렸다면 cnt == 0
Uploaded by N2T
'자바 > 알고리즘' 카테고리의 다른 글
[알고리즘] 두 스티커 (0) | 2023.09.24 |
---|---|
[알고리즘] 생태학 (0) | 2023.09.24 |
[알고리즘] 회전하는큐 (0) | 2023.09.12 |
[알고리즘] four squares (0) | 2023.09.10 |
[알고리즘]병사 배치하기 (0) | 2023.09.01 |