From 9ce527a314028e8983d60af2bca8ff06ce836cf0 Mon Sep 17 00:00:00 2001 From: Chu Sang Yoon Date: Sun, 16 Nov 2025 21:45:42 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=EC=84=9C=EB=B2=84=20=EC=A6=9D=EC=84=A4=20?= =?UTF-8?q?=ED=9A=9F=EC=88=98.cpp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\354\204\244 \355\232\237\354\210\230.cpp" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 "\354\204\234\353\262\204 \354\246\235\354\204\244 \355\232\237\354\210\230.cpp" diff --git "a/\354\204\234\353\262\204 \354\246\235\354\204\244 \355\232\237\354\210\230.cpp" "b/\354\204\234\353\262\204 \354\246\235\354\204\244 \355\232\237\354\210\230.cpp" new file mode 100644 index 0000000..a1f2f21 --- /dev/null +++ "b/\354\204\234\353\262\204 \354\246\235\354\204\244 \355\232\237\354\210\230.cpp" @@ -0,0 +1,30 @@ +#include +#include +#include +using namespace std; + +int solution(vector players, int m, int k) { + int answer = 0; + int server = 0; + queue> q; + + for(int i = 0; i < players.size(); i++) { + if(!q.empty() && q.front().first == i) { // 시간이 다되면 + server -= q.front().second; // 서버 수 감소 + q.pop(); // 큐에서 제거 + } + + if(m <= players[i]) { + int required = players[i] / m; // 필요한 서버 수 계산 + + if (required > server) { // 기존서버 보다 많으면 + int newServer = required - server; // 추가로 필요한 서버 수 + server += newServer; // 현재 서버 수 증가 + answer += newServer; // 총 증설 횟수에 추가 + q.push({i + k, newServer}); + } + } + } + + return answer; // 총 증설 횟수 반환 +} From 36b5c8caba398a248375d01f98fc239430b36cb2 Mon Sep 17 00:00:00 2001 From: Chu Sang Yoon Date: Sun, 16 Nov 2025 21:58:45 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=EB=A9=94=EB=89=B4=EB=A6=AC=EB=89=B4?= =?UTF-8?q?=EC=96=BC.cpp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4\353\246\254\353\211\264\354\226\274.cpp" | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 "\353\251\224\353\211\264\353\246\254\353\211\264\354\226\274.cpp" diff --git "a/\353\251\224\353\211\264\353\246\254\353\211\264\354\226\274.cpp" "b/\353\251\224\353\211\264\353\246\254\353\211\264\354\226\274.cpp" new file mode 100644 index 0000000..3dbc22a --- /dev/null +++ "b/\353\251\224\353\211\264\353\246\254\353\211\264\354\226\274.cpp" @@ -0,0 +1,63 @@ +#include +#include +#include +#include +using namespace std; + +// 정렬 기준: 등장 횟수(int)가 큰 순서대로 정렬 +bool cmp(pair a, pair b){ + return a.second > b.second; +} + +vector solution(vector orders, vector course) { + vector answer; + map m; // 메뉴조합 문자열 → 등장 횟수 저장 + + for(string i : orders){ + sort(i.begin(), i.end()); // 주문을 정렬 + + for(int j : course){ + if(i.length() < j) continue; // 주문 길이가 j보다 짧으면 조합 불가능 + + // false = 선택할 문자, true = 선택하지 않을 문자 + vector tmp(i.length(), true); + for(int k = 0 ; k < j ; k++) tmp[k] = false; + + // next_permutation을 사용해 모든 조합 생성 + do{ + string str; + + // false 위치의 문자를 선택하여 조합 문자열 생성 + for(int k = 0 ; k < tmp.size() ; k++){ + if(!tmp[k]) str += i[k]; + } + + // 조합 등장 횟수 증가 + m[str]++; + } + while(next_permutation(tmp.begin(), tmp.end())); // 다음 조합 생성 + } + } + + // course 길이별 최대 등장 횟수를 기록할 배열 + int arr[course.back() + 1]; + fill(arr, arr + course.back() + 1, 0); + + // 등장 횟수 기준 내림차순 정렬 + vector> v(m.begin(), m.end()); + sort(v.begin(), v.end(), cmp); + + // 가장 많이 등장한 조합만 answer에 추가 + for(auto i : v){ + // 등장횟수 2 이상일 때만 포함 + if(i.second >= arr[i.first.length()] && i.second > 1) { + arr[i.first.length()] = i.second; // 해당 길이의 최대 등장 횟수 업데이트 + answer.push_back(i.first); // 결과에 추가 + } + } + + // 최종 결과를 사전순 정렬 후 반환 + sort(answer.begin(), answer.end()); + + return answer; +}