[2021 카카오 코딩테스트] 메뉴 리뉴얼 - 자바 java
2021. 12. 22. 05:00ㆍ네카라쿠배 취준반 - 프로그래머스 문제 풀이
0. 자세한 설명은 YouTube 영상으로
1. Hash를 활용한 solution
import java.util.*;
class Solution {
List<String> answerList = new ArrayList<>();
Map<String, Integer> hashMap = new HashMap<>();
public String[] solution(String[] orders, int[] course) {
// 1. 각 Order 정렬
for (int i = 0; i < orders.length; i++) {
char[] arr = orders[i].toCharArray();
Arrays.sort(arr);
orders[i] = String.valueOf(arr);
}
// 2. 각 order를 기준으로 courseLength 만큼의 조합 만들기
for (int courseLength : course) {
for (String order : orders)
combination("", order, courseLength);
// 3. 가장 많은 조합 answer에 저장
if (!hashMap.isEmpty()) {
List<Integer> countList = new ArrayList<>(hashMap.values());
int max = Collections.max(countList);
if (max > 1)
for (String key : hashMap.keySet())
if (hashMap.get(key) == max)
answerList.add(key);
hashMap.clear();
}
}
Collections.sort(answerList);
String[] answer = new String[answerList.size()];
for (int i = 0; i < answer.length; i++)
answer[i] = answerList.get(i);
return answer;
}
public void combination(String order, String others, int count) {
// 탈출 조건 : count == 0
if (count == 0) {
hashMap.put(order, hashMap.getOrDefault(order, 0) + 1);
return;
}
// 0부터 length까지 조합
for (int i = 0; i < others.length(); i++)
combination(order + others.charAt(i), others.substring(i + 1), count - 1);
}
public static void main(String[] args){
Solution sol = new Solution();
String[] orders = {"ABCFG", "AC", "CDE", "ACDE", "BCFG", "ACDEH"};
int[] course = {2,3,4};
System.out.println(sol.solution(orders, course));
}
}
- YouTube 영상에 자세한 내용을 정리했으니 참고하세요.
'네카라쿠배 취준반 - 프로그래머스 문제 풀이' 카테고리의 다른 글
[2021 카카오 코딩테스트] 순위 검색 - 자바 java (0) | 2021.12.29 |
---|---|
[2021 카카오 코딩테스트] 메뉴 리뉴얼 - 파이썬 (0) | 2021.12.27 |
[프로그래머스] 체육복 문제 풀이(탐욕법 Greedy Lv.1) - C++ (0) | 2021.12.20 |
[프로그래머스] 체육복 문제 풀이(탐욕법 Greedy Lv.1) - 파이썬 python (0) | 2021.12.15 |
[프로그래머스] 프린터 문제 풀이(스택/큐 Lv.2) - 파이썬 python (0) | 2021.12.13 |