백준 17255 - N으로 만들기
알고리즘/백준

백준 17255 - N으로 만들기

[문제 바로가기]

 

1. 유형

DFS

 

2. 문제 분석

2-1. 설계

시작 위치를 탐색 -> 함수 시작 -> 현 위치에서 왼쪽, 오른쪽으로 재귀 진행 -> 총 N-1개를 탐색하면 종료

 

2-2. 설명

투포인터를 사용했습니다.

[그림1]은 "521"중 2를 시작위치로 설정했을 때의 경우 입니다. 왼쪽, 오른쪽에 포인터를 두고 path변수에 만든 루트를 저장합니다. 그리고 Set 컬렉션에서 중복을 제외해주면 됩니다.

그림1

 

 

3. 코드

import java.io.*;
import java.util.*;

public class Main {
	static char[] arr;
	static Set<String> set;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		arr = st.nextToken().toCharArray();
		set = new HashSet<>();
		for(int i=0; i<arr.length; i++) {
			dfs(i,i, ""+arr[i], ""+arr[i]);
		}
		System.out.println(set.size());
	}
	static void dfs(int L, int R, String s, String path) {
		if(L==0 && R==arr.length-1) {
			set.add(path);
			return;
		}
		if(L-1>=0) {
			dfs(L-1, R, arr[L-1]+s, path+" "+arr[L-1]+s);
		}
		if(R+1<arr.length) {
			dfs(L, R+1, s+arr[R+1], path+" "+s+arr[R+1]);
		}
	}
	static int stoi(String s) {
		return Integer.valueOf(s);
	}
}

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

백준 1967 - 트리의지름  (0) 2021.09.24
백준 1613 - 역사  (0) 2021.09.23
백준 9548 - 무제  (0) 2021.09.22
백준 17141 - 연구소2  (0) 2021.09.21
백준 1622 - 공통 순열  (0) 2021.09.21