728x90
메뉴 리뉴얼
https://school.programmers.co.kr/learn/courses/30/lessons/72411



풀이
가능한 모든 조합
목표 길이 도달 -> 조합 완성
// 조합, 빈도
static Map<String, Integer> HM;
static void comb(char[] arr, int start, int len, StringBuilder sb) {
if (sb.length() == len) {
String com = sb.toString();
HM.put(com, HM.getOrDefault(com, 0) + 1);
return;
}
for (int i = start; i < arr.length; i++) {
sb.append(arr[i]);
comb(arr, i + 1, len, sb);
sb.deleteCharAt(sb.length() - 1);
}
}
2회 이상인 최대 빈도 찾기 -> 최대 빈도 조합 결과에 추가
for (int cnt : HM.values()) {
if (cnt >= 2) {
maxCnt = Math.max(maxCnt, cnt);
}
}
for (String key : HM.keySet()) {
if (HM.get(key) == maxCnt && maxCnt >= 2) {
result.add(key);
}
}
코드
import java.util.*;
class Solution {
// 조합, 빈도
static Map<String, Integer> HM;
static void comb(char[] arr, int start, int len, StringBuilder sb) {
if (sb.length() == len) {
String com = sb.toString();
HM.put(com, HM.getOrDefault(com, 0) + 1);
return;
}
for (int i = start; i < arr.length; i++) {
sb.append(arr[i]);
comb(arr, i + 1, len, sb);
sb.deleteCharAt(sb.length() - 1);
}
}
public String[] solution(String[] orders, int[] course) {
List<String> result = new ArrayList<>();
for (int c : course) {
HM = new HashMap<>();
int maxCnt = 0;
for (String o : orders) {
char[] arr = o.toCharArray();
Arrays.sort(arr);
comb(arr, 0, c, new StringBuilder());
}
for (int cnt : HM.values()) {
if (cnt >= 2) {
maxCnt = Math.max(maxCnt, cnt);
}
}
for (String key : HM.keySet()) {
if (HM.get(key) == maxCnt && maxCnt >= 2) {
result.add(key);
}
}
}
Collections.sort(result);
return result.toArray(new String[0]);
}
}728x90
반응형
'✏️ > Programmers' 카테고리의 다른 글
| [프로그래머스/Lv.1] PCCP - 붕대 감기 (Java) (0) | 2026.02.03 |
|---|---|
| [프로그래머스/Lv.1] PCCP - 동영상 재생기 (Java) (0) | 2026.02.03 |
| [프로그래머스/Lv.2] 오픈채팅방 (Java) (0) | 2026.02.01 |
| [프로그래머스/Lv.1] 신고 결과 받기 (Java) (0) | 2026.02.01 |
| [프로그래머스/알고리즘 고득점 Kit] 탐욕법(Greedy) - 조이스틱 (Java) (0) | 2026.01.28 |