728x90
반응형
목차
문제
https://school.programmers.co.kr/learn/courses/30/lessons/72411
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 구현 방향
문자열에서 각 문자에 대해 2개 이상씩 나오면 구한 조합을 바탕으로 비교하는 식으로 진행했다.
이때 쉽게 풀 수 있는 방법은 길이별로 배열을 만들어 스택형식으로 푸는 것이다.
1. top이 메뉴 조합보다 작을 경우 -> 배열을 비운 뒤 새로 넣어준다.
2. top이 메뉴 조합보다 클 경우 -> 아무것도 하지 않는다.
3. top이 메뉴 조합이랑 같은 경우 -> 그냥 push 해준다.
코드 구현
function solution(orders, course) {
var target = Array.from({length: 100}, ()=> []);
function combi(comb, arr, n, idx) {
if (comb.length === n) {
let cnt = 0;
for (let order of orders) {
if (comb.every((item) => order.includes(item))) cnt++;
}
if (cnt >= 2) {
if(target[n].length === 0){
target[n].push([...comb, cnt]);
}else{
let top = target[n][0][ target[n][0].length-1];
if(top === cnt){
target[n].push([...comb, cnt]);
}else if(top < cnt){
target[n]=[];
target[n].push([...comb, cnt]);
}else{
;
}
}
}
return;
}
for (let i = idx + 1; i < arr.length; i++) {
comb.push(arr[i]);
combi(comb, arr, n, i);
comb.pop();
}
}
let dic = [
"A",
"B",
"C",
"D",
"E",
"F",
"G",
"H",
"I",
"J",
"K",
"L",
"M",
"N",
"O",
"P",
"Q",
"R",
"S",
"T",
"U",
"V",
"W",
"X",
"Y",
"Z",
];
let arr = [];
for (let dc of dic) {
let cnt = 0;
for (let order of orders) {
if (order.includes(dc)) {
cnt++;
}
}
if (cnt >= 2) arr.push(dc);
}
let comb = [];
let answer= [];
for (let crs of course) {
combi(comb, arr, crs, -1);
}
for (let crs of course) {
if(target[crs].length){
for(let tg of target[crs]){
answer.push(tg.slice(0, tg.length-1).join(""));
}
}
}
answer.sort((a, b)=>a.localeCompare(b));
return answer;
}반응형
'PS > 프로그래머스' 카테고리의 다른 글
| [프로그래머스][완전 탐색] 인사고과 (0) | 2025.11.03 |
|---|---|
| [프로그래머스][슬라이딩 윈도우] 할인 행사 (0) | 2025.10.27 |
| [프로그래머스][분할정복] 표현 가능한 이진트리 (0) | 2025.10.22 |
| [프로그래머스][브루트포스] 수식 최대화 (0) | 2025.10.15 |
| [프로그래머스][수학] 점찍기, 두 원 사이의 정수의 쌍 (0) | 2025.10.12 |