https://programmers.co.kr/learn/courses/30/lessons/72411
코딩테스트 연습 - 메뉴 리뉴얼
레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서
programmers.co.kr
import java.util.*;
class Solution {
static int max = 0;
static String[] orders_copy;
static List<String> menu = new LinkedList<>();
static List<String> courses = new LinkedList<>();
static List<String> courses_imsi = new LinkedList<>();
public String[] solution(String[] orders, int[] course) {
orders_copy = orders.clone();
for( int i = 0 ; i < orders.length ; i++ ){
for( int j = 0 ; j < orders[i].length() ; j++ ){
if( menu.indexOf( "" + orders[i].charAt(j) ) == -1 ) menu.add( orders[i].charAt(j) +"" );
}
}
Collections.sort( menu );
boolean[] visited = new boolean[ menu.size() ];
for( int i = 0 ; i < course.length ; i++ ){
comb( 0, 0 ,course[i] , visited , "" );
for( String l : courses_imsi ){
courses.add( l );
}
courses_imsi.clear();
max = 0;
}
Collections.sort( courses );
String[] answer = new String[ courses.size() ];
for( int i = 0 ; i < answer.length ; i++ ){
answer[i] = courses.get(i);
}
return answer;
}
// 메뉴 후보 중 조합을 구해준다.
static void comb( int depth , int start , int r , boolean[] visited , String r_course ){
if( depth == r ){
isCorrect( r_course );
return;
}
for( int i = start ; i < visited.length ; i++ ){
visited[i] = true;
comb( depth + 1 , i + 1 , r , visited , r_course + menu.get(i) );
visited[i] = false;
}
}
// 가장 많이 함께 주문한 단품메뉴인지 확인.
static void isCorrect( String r_course){
int count = 0;
for( int i = 0 ; i < orders_copy.length ; i++ ){
String order = orders_copy[i];
boolean chk = false;
for( int j = 0 ; j < r_course.length() ; j++ ){
if( order.indexOf( r_course.charAt(j) +"" ) == -1 ){
chk = true;
break;
}
}
if( !chk ) count++;
}
if( count >= 2 ){
if( max < count ){
max = count;
courses_imsi.clear();
courses_imsi.add( r_course );
} else if ( max == count ) courses_imsi.add( r_course );
}
}
}
결과는 테스트 케이스 모두 통과였다. 그러나 몇몇 케이스에서 상당한 시간이 걸렸다... 좀 더 깔끔한 풀이가 있을 것 같아서 그 부분은 나중에 확인해봐야 겠다.
'코딩 테스트 공부 > 프로그래머스' 카테고리의 다른 글
| [ 프로그래머스 ] 평행 (2) | 2022.10.18 |
|---|---|
| [ JAVA ] 프로그래머스 - [1차] 캐시 (0) | 2022.06.27 |
| [ JAVA ] 프로그래머스 - 2 x n 타일링 (0) | 2022.06.23 |
| [ JAVA ] 프로그래머스 - 모음사전 (0) | 2022.06.21 |
| [ JAVA ] 프로그래머스 - 2개 이하로 다른 비트 (0) | 2022.06.17 |