광규니
광규니네
광규니
전체 방문자
오늘
어제
  • 분류 전체보기 (154)
    • 알고리즘 (100)
      • 알고리즘 개념 (2)
      • 문제 풀이 (96)
    • 주절주절 (19)
      • 자격증, 활동 후기 (4)
      • 전시회 후기 (3)
      • 이모저모 (2)
      • 회고 (3)
      • 뜨럼 (7)
    • 운영체제 (9)
    • 개발 지식 (9)
      • Apple Watch (4)
      • MySQL (2)
      • Eclipse (1)
      • XCode (1)
    • 네트워크 공부 (1)
    • 데이터베이스 공부 (5)
    • Java 공부 (7)
    • TMP (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 드린이
  • BOJ
  • 티스토리챌린지
  • 애플워치 앱 만들기
  • 백준
  • BFS
  • 프로그래머스
  • 자바
  • 알고리즘
  • 애플워치 앱
  • 운영체제
  • 구현
  • 다이나믹 프로그래밍
  • 합주
  • 오블완
  • 컴퓨터 사이언스
  • OS
  • 파이썬
  • DP
  • 개념

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
광규니

광규니네

알고리즘/문제 풀이

[Java/자바 백준 1062] 가르침

2022. 1. 18. 12:37
반응형

풀이

문제 해석이 어려웠던 문제.

알파벳 K개를 가르칠 때 N개 단어 중 최대로 읽을 수 있는 개수를 정해주는 문제

"anta"로 시작해서 "tica"로 끝나기 때문에

a,n,t,i,c 5개 알파벳은 꼭 있어야 하므로 K는 5개 이상 이어야합니다.

 

그 다음 조합으로 풀고, 이중 for문을 통해 단어를 읽을 수 있으면 +1 시켜주어서 max값으 비교했습니다.

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

public class Main{
	static int N, K, max;
	static boolean[] isSelected = new boolean[26];
	static String[] strArr;
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine()," ");
		N = Integer.parseInt(st.nextToken());
		K = Integer.parseInt(st.nextToken());
		
		if(K < 5) {
			System.out.println(0);
			return;
		}else if(K == 26) {
			System.out.println(N);
			return;
		}
		else {		
			strArr = new String[N];
			for(int i = 0 ; i < N ; i++) {
				String tmp = br.readLine();
				strArr[i] = tmp.substring(4, tmp.length()-4);
			}
			isSelected['a'-97] = true;
			isSelected['n'-97] = true;
			isSelected['t'-97] = true;
			isSelected['i'-97] = true;
			isSelected['c'-97] = true;
			K -= 5;
			combination(0,0);
			System.out.println(max);
		}
	}
	private static void combination(int start, int cnt) {
		if(max == N) {
			return;
		}
		if(cnt == K) {
			int flagCnt = 0;
			for(int i = 0 ; i < N ; i++) {
				boolean flag = true;
				for(int j = 0 ; j < strArr[i].length() ; j++) {
					if(!isSelected[strArr[i].charAt(j) - 97]) {
						flag = false;
						break;
					}
				}
				if(flag == true) {
					flagCnt ++;
				}
			}
			max = Math.max(max, flagCnt);
			return;
		}
		
		for(int i = start ; i < 26 ; i++) {
			if(!isSelected[i]) {
				isSelected[i] = true;
				combination(i+1, cnt+1);
				isSelected[i] = false;
			}
		}
	}
}
반응형
저작자표시 (새창열림)

'알고리즘 > 문제 풀이' 카테고리의 다른 글

[Java/자바 백준 13901] 로봇  (0) 2022.01.28
[Java/자바 백준 11559] PuyoPuyo  (0) 2022.01.18
[Java/자바 백준 21609] 상어 중학교  (0) 2022.01.15
[Java/자바 백준 20057] 마법사 상어와 토네이도  (0) 2022.01.10
[Java/자바 프로그래머스] 오픈 채팅방  (0) 2022.01.07
    '알고리즘/문제 풀이' 카테고리의 다른 글
    • [Java/자바 백준 13901] 로봇
    • [Java/자바 백준 11559] PuyoPuyo
    • [Java/자바 백준 21609] 상어 중학교
    • [Java/자바 백준 20057] 마법사 상어와 토네이도
    광규니
    광규니
    공부 및 일상 올리기~

    티스토리툴바