728x90
반응형
https://www.acmicpc.net/problem/2661
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class P2661 {
static boolean isFinish = false;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringBuffer sb = new StringBuffer();
perm(sb, 0, n);
}
static boolean isGoodNum(StringBuffer sb) {
// StringBuffer sb = new StringBuffer(String.valueOf(n));
boolean isG = true;
for (int i = 1; i <= sb.length() / 2 && isG; i++) {
int a = sb.length() - i;
int b = sb.length() - 2 * i;
boolean flag = true;
for (int j = 0; j < i; j++) {
if (sb.charAt(a + j) != sb.charAt(b + j)) {
flag = false;
}
}
if (flag == true) {
isG = false;
break;
}
}
return isG;
}
static void perm(StringBuffer sb, int i, int n) {
if (i == n) {
if (!isFinish) {
System.out.println(sb);
isFinish = true;
}
return;
}
else {
for (int k = 1; k <= 3 && !isFinish; k++) {
sb.append(k);
if (isGoodNum(sb)) {
perm(sb, i + 1, n);
}
sb.deleteCharAt(i);
}
}
}
}
현재 수열이 좋은수열인지 판단하는 함수 boolean isGoodNum(StringBuffer sb)가 있다.
StringBuffer형태의 숫자를 인자로 받아서,
수열의 끝에서부터 i자릿수의 수열 짝을 만들어 같은 수열이 반복되는지 확인한다.
좋은 수열이라면 true를, 아니라면 false를 리턴한다.
perm함수에서는
각 단계마다 sb에 한 숫자씩 덧붙인다.
숫자를 덧붙였을 때 해당 sb가 좋은 수열이라면
perm(sb,i+1,n)을 호출해 다음 단계를 수행한다.
728x90
반응형
'코딩 > 백준-자바' 카테고리의 다른 글
[자바] 백준 2816번: 디지털 티비 (0) | 2023.01.20 |
---|---|
[자바] 백준 5052번: 전화번호 목록 (1) | 2023.01.19 |
[자바] 백준 11657번: 타임머신 (0) | 2023.01.18 |
[자바] 백준 2621번: 카드게임 (0) | 2023.01.17 |
[자바] 백준 1747번: 소수&팰린드롬 (0) | 2023.01.17 |
댓글