[문제 링크]
https://school.programmers.co.kr/learn/courses/30/lessons/72411?language=java
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
[풀이 과정]
https://www.youtube.com/watch?v=Jb34jY91450
이거보고 이해했다.
진짜 이 문제 못 풀었으면 꼭 보길 바랍니다!!
설명 너무 잘해주셔서 이해하고 스스로 풀었습니다.
[코드]
import java.util.*;
class Solution {
Map<String,Integer> hashMap = new HashMap<>();
List<String> answerList = new ArrayList<>();
public String[] solution(String[] orders, int[] course) {
// 메뉴 구성은 오름차순이 되어야함
for(int i = 0; i < orders.length; i++) {
char[] arr = orders[i].toCharArray();
Arrays.sort(arr);
orders[i] = String.valueOf(arr);
}
// 코스 갯수에 따른 모든 패턴 찾기
for(int courseLength : course) {
for(String order : orders) {
findPatterns("", order, courseLength);
}
if(!hashMap.isEmpty()) {
// 가장 많이 나온 조합이 몇번인지
int max = Collections.max(hashMap.values());
// 가장 많이 나온 조합이 2번 이상이면
if(max > 1) {
// max값 만큼 나온 조합을 구하여 answerList에 담음
for (String key : hashMap.keySet()) {
if(hashMap.get(key) == max) {
answerList.add(key);
}
}
}
}
hashMap.clear();
}
// return 할때 오름차순 정렬하라고 했기 때문
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 findPatterns(String s, String order, int courseLength) {
// 종료 조건
if(courseLength == s.length()) {
hashMap.put(s, hashMap.getOrDefault(s,0) + 1);
return;
}
// 수행
for(int i = 0; i < order.length(); i++) {
findPatterns(s+order.charAt(i), order.substring(i+1), courseLength);
}
}
}
[회고]
이해하고 푸니까 쉬웠습니다.
유튜브 강의 너무 감사합니다.
질문과 피드백은 언제나 환영입니다.
감사합니다.
'CodingTest > Programmers' 카테고리의 다른 글
[Programmers] 괄호 회전하기 (3) | 2025.07.09 |
---|---|
[Programmers] 입국 심사 (1) | 2025.06.26 |
[Programmers] 문자열 내 마음대로 정렬하기 (2) | 2025.05.23 |
[Programmers] 두 개 뽑아서 더하기 (0) | 2025.05.22 |
[Programmers] K번째수 (1) | 2025.05.22 |