Java

[백준 2661] 좋은수열 (JAVA)

iheeeee6-6 2023. 2. 15. 15:27
728x90

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

 

2661번: 좋은수열

첫 번째 줄에 1, 2, 3으로만 이루어져 있는 길이가 N인 좋은 수열들 중에서 가장 작은 수를 나타내는 수열만 출력한다. 수열을 이루는 1, 2, 3들 사이에는 빈칸을 두지 않는다.

www.acmicpc.net

 

백트래킹을 사용하여 해결하면 된다.

연속되는 숫자중에 같은 부분이 있는지 확인하며 수열을 만들어나간다.

제일 작은 수열이므로 가장 먼저 만들어질 것이기에 수열의 길이가 n일 경우 프로그램을 종료시킨다.

 

 

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

public class Main {
	static int n;
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		 n= Integer.parseInt(br.readLine());
		back("1");

	}
	static void back(String str) {
		if(str.length()==n) {
			System.out.println(str);
			System.exit(0);
		}
		for(int i=1;i<=3;i++) {
			if(find(str+i)) {
				back(str+i);
			}
		}
	}
	static boolean find(String str) {
		for(int j=1;j<=str.length()/2;j++) {
			for(int k=0;k<=str.length()-2*j;k++) {
				if(str.substring(k, k+j).equals(str.substring(k+j,k+j+j))) {
					return false;
				}
			}
		}
		return true;
	}

}

'Java' 카테고리의 다른 글

[백준 2096] 내려가기 (JAVA)  (0) 2023.02.16
[백준 1202] 보석 도둑 (JAVA)  (0) 2023.02.15
[백준 1021] 회전하는 큐 (JAVA)  (0) 2023.02.10
[백준 1699] 제곱수의 합 (JAVA)  (0) 2023.02.08
[백준 1697] 숨바꼭질 (JAVA)  (0) 2023.02.08