728x90
https://programmers.co.kr/learn/challenges
풀이 방법
조합 이용
수정중..
JAVA 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
public class Kakao_2021_메뉴리뉴얼 {
static char pick[];
static String[] list;
static ArrayList<String> result;
static int max;
public static void main(String[] args) {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
//"ABCFG","AC","CDE","ACDE","BCFG","ACDEH"
list= new String[]{"ABCFG", "AC", "CDE", "ACDE", "BCFG", "ACDEH"};
result=new ArrayList<>();
for (int i = 0; i < list.length; i++) {
for (int j = 2; j < list[i].length(); j++) {
pick=new char[j];
max=Integer.MIN_VALUE;
combination(0,0,j,list[i],i);
}
}
Collections.sort(result);
System.out.println(result);
}
private static void combination(int cnt, int start,int R,String str,int index) {
if(cnt==R) {
String pick_str="";
for (char x:pick) {
pick_str+=x;
}
System.out.println(pick_str);
boolean flag=false;
for (int i = 0; i < result.size(); i++) {
if (result.get(i).equals(pick_str)) {
flag=true;
break;
}
}
// 만약, 지금 뽑은게 result에 없다면 카운트 세기
int menu_cnt=1;
if (!flag) {
for (int i =0; i < list.length; i++) {
boolean flag2=false;
System.out.println("비교문자열"+list[i]);
if (i!=index&&list[i].length()>=pick_str.length()) {
for (int j = 0; j < R; j++) {
char curr=pick_str.charAt(j);
if(list[i].contains(String.valueOf(curr))) {
continue;
}else {
flag2=true;
break;
}
}
if(!flag2) menu_cnt++;
}
}
if(menu_cnt>=2 && max<=menu_cnt) {
max=menu_cnt;
System.out.println("정답::"+pick_str);
result.add(pick_str);
}
}
return;
}
for (int i = start; i < str.length(); i++) {
pick[cnt]=str.charAt(i);
combination(cnt+1,i+1,R,str,index);
}
}
}
조합 구현과 주어진 조건만 잘 만족하게 코드를 작성하면 되는 문제였다.
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[JAVA] 2021 카카오 신입개발자 - 신규 아이디 추천 (0) | 2021.09.09 |
---|