본문 바로가기
CodingTest/Programmers

[Programmers] 메뉴 리뉴얼

by 창브로 2025. 6. 24.

[문제 링크]

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);
        }
        
        
    }
}

[회고]

이해하고 푸니까 쉬웠습니다.

유튜브 강의 너무 감사합니다.

 

 

 

 

질문과 피드백은 언제나 환영입니다.

감사합니다.