PS/BOJ2022. 5. 2. 17:56

암호만들기 : https://www.acmicpc.net/problem/1759

 

숏코드 : https://www.acmicpc.net/source/6546925

 

숏코드 참조 후 개선한 점.

1. combi 배열을 사용하지 않고, String pwd에 결과를 누적하여 조합을 생성.

2. HashMap의 contains 메소드를 활용하여 모음의 유무를 체크했던 것을 if문을 통해 간단하게 구현.

=>성능상 이점이 있는 것은 아니지만 간단히 if문을 통해 검사할 수 있는 부분을 생각해내지 못했음.(시간 오래걸림)

 

추가사항:

1. 조합을 구할 때 반드시 start 가 param으로 있어야 한다는 점을 잊어버림.

start 사용하지 않을 경우, 요소가 중복되므로 조합의 요건을 갖추지 못할 뿐더러 비효율적임.

start를 통해 for루프 내의 index에 대한 컨트롤이 가능해짐.(중복제거)

 

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

public class Main {

	static int L, C;
	static char[] arr;
	private static boolean DBG = false;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		L = Integer.parseInt(st.nextToken());
		C = Integer.parseInt(st.nextToken());
		arr = new char[C];
		st = new StringTokenizer(br.readLine());
		for (int i = 0; i < C; ++i) {
			arr[i] = st.nextToken(" ").charAt(0);
		}

		Arrays.sort(arr);
		map = new HashSet<>();
		map.add('a');
		map.add('e');
		map.add('i');
		map.add('o');
		map.add('u');
		if (DBG)
			System.out.println(new String(arr));
		char[] combi = new char[L];		
		dfs(0, 0, combi);
		
		
	}
	static HashSet<Character> map;
	private static void dfs(int idx, int start, char[] comb) {
		if (idx == L) {
			boolean flag =false;
			int cnt =0;
			if (DBG) {
				for (char c : comb)
					System.out.print(c);
				System.out.println();
			}
			for (char c : comb) {
				if(map.contains(c)) {
					flag = true;				
				} else {
					cnt++;
				}
			
			}
			if(flag && cnt >=2)
				System.out.println(new String(comb));

		} else {
			
			for (int i = start; i < C; i++) {
				comb[idx] = arr[i];
				dfs(idx + 1, i + 1, comb);
			}
		}

	}

}

 

 

https://www.acmicpc.net/source/6546925
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashSet;
import java.util.StringTokenizer;

public class Main {

	static int L, C;
	static char[] arr;
	private static boolean DBG = false;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		L = Integer.parseInt(st.nextToken());
		C = Integer.parseInt(st.nextToken());
		arr = new char[C];
		st = new StringTokenizer(br.readLine());
		for (int i = 0; i < C; ++i) {
			arr[i] = st.nextToken(" ").charAt(0);
		}

		Arrays.sort(arr);

		dfs(0, 0, "");

	}

	private static void dfs(int idx, int start, String pwd) {
		if (idx == L) {
			int mo = 0;
			int ja = 0;
			for (char c : pwd.toCharArray()) {
				if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
					mo++;
				} else {
					ja++;
				}

			}
			if (mo >= 1 && ja >= 2)
				System.out.println(pwd);

		} else {
			for (int i = start; i < C; i++) {
				dfs(idx + 1, i + 1, pwd + arr[i]);
			}
		}

	}

}

'PS > BOJ' 카테고리의 다른 글

1987(HashSet vs Array)  (0) 2022.05.03
2580  (0) 2022.05.03
5014  (0) 2022.05.02
3108  (0) 2022.05.02
2186(중요)  (0) 2022.05.01
Posted by easy16