백준 1759번: 암호만들기 [JAVA]

2023. 3. 15. 00:59·개발/코딩테스트

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

 

1759번: 암호 만들기

첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.

www.acmicpc.net

  • 풀이

주어진 문자 C개 중 L개를 뽑은 뒤 정렬하면 되기 때문에 조합을 사용한다. 초기 문자열을 정렬하고, 재귀 함수를 이용해 자신보다 인덱스가 큰 문자들만 탐색하며 암호를 찾아나간다. 찾은 암호에 모음이 1개, 자음이 2개 이상 있는지 확인한 뒤 출력한다.

  • 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
	static char[] arr; // 알파벳 배열
	static int L, C; 
	static boolean isSelected[];
	
	static void findPW(int r, int start) {
		if (r==L) {
			StringBuilder sb = new StringBuilder();
			int v=0, c=0; //모음, 자음 개수
			for(int i=0; i<C; i++) {
				if (isSelected[i]==true) {
					if (arr[i]=='a'||arr[i]=='e'||arr[i]=='i'||arr[i]=='o'||arr[i]=='u') v++;
					else c++;
					sb.append(arr[i]);
				}
			}
			if (v>=1 && c>=2) System.out.println(sb);
			return;
		}
		
		for(int i=start;i<C; i++) {
			if (isSelected[i]==true) continue;
			isSelected[i] = true;
			findPW(r+1, i);
			isSelected[i] = false;
		}
	}

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(bf.readLine());
		
		L = Integer.parseInt(st.nextToken());
		C = Integer.parseInt(st.nextToken());
		
		arr = new char[C];
		isSelected = new boolean[C];
		
		// 알파벳 입력
		st = new StringTokenizer(bf.readLine());
		for (int i = 0; i<C; i++) {
			arr[i] = st.nextToken().charAt(0);
		}
		// 알파벳 정렬
		Arrays.sort(arr); 
		
		findPW(0, 0);
	}

}
'개발/코딩테스트' 카테고리의 다른 글
  • 백준 15650번: N과 M(2) [JAVA]
  • 백준 2960번: 도영이가 만든 맛있는 음식 [JAVA]
  • 백준 17608번: 막대기 [JAVA]
  • 백준 2164번: 카드2 [JAVA]
로또
로또
게임 개발자 연습생의 발전 일지
  • 로또
    게임 개발 발전소
    로또
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 개발
        • 코딩테스트
        • JAVA
        • DB
        • Unity
      • 강의
        • 패스트캠퍼스 0원 챌린지
        • 멋쟁이 사자처럼 유니티 부트캠프
      • 게임
        • 공부
        • 리뷰
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    그리디알고리즘
    Unity
    완전탐색
    멋쟁이사자처럼후기
    Java
    백트래킹
    수강료0원챌린지
    자료구조
    dfs
    환급챌린지
    BFS
    패스트캠퍼스
    게임개발
    패캠챌린지
    2839
    오공완
    직장인자기계발
    직장인인강
    패스트캠퍼스후기
    C#
    분리집합
    그래프
    백준
    트리
    패캠인강후기
    C4D
    그리디
    한번에끝내는프론트엔드개발초격차패키지Online
    3D웹인터랙티브
    코딩테스트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
로또
백준 1759번: 암호만들기 [JAVA]
상단으로

티스토리툴바