본문으로 바로가기

PGMS 메뉴 리뉴얼

category Algorithm/PGMS 2021. 12. 29. 23:29

https://programmers.co.kr/learn/courses/30/lessons/72411

 

코딩테스트 연습 - 메뉴 리뉴얼

레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서

programmers.co.kr

function solution(orders, course) {
	var answer = [];
	let arr = {};
	let a = combination(orders[0].split(''), 3);
	for (let j = 0; j < orders.length; j++) {
		let a = orders[j].split('').sort().join('');
		for (let k = 1; k <= a.length; k++) {
			let temp = combination(a.split(''), k);
			for (let i = 0; i < temp.length; i++) {
				let b = temp[i].join('');
				arr[b] !== undefined ? (arr[b] += 1) : (arr[b] = 1);
			}
		}
	}
	for (let i = 0; i < course.length; i++) {
		let len = course[i];
		let item = Object.entries(arr).filter(
			([key, value], index) => key.length === len
		);
		let max = 0;
		item.forEach(([key, value]) => {
			max = max > value ? max : value;
		});
		let key = Object.entries(arr).filter(
			([key, value], index) =>
				key.length === len && value === max && value !== 1
		);
		key.forEach(([key, value]) => {
			answer.push(key);
		});
	}

	return answer.sort();
}

function combination(arr, selectNum) {
	const result = [];
	if (selectNum === 1) return arr.map((v) => [v]);
	arr.forEach((v, idx, arr) => {
		const fixed = v;
		const restArr = arr.slice(idx + 1);
		const combinationArr = combination(restArr, selectNum - 1);
		const combineFix = combinationArr.map((v) => [fixed, ...v]);
		result.push(...combineFix);
	});
	return result;
}

조합을 만들어서 겹치는 것 중 많은것을 뽑아내는 문제였다.

 

제일 중요했던건 조합 구현이었던거 같고 나머지는 이에 맞춰 구현을 해주면 된다.

'Algorithm > PGMS' 카테고리의 다른 글

PGMS - 소수찾기  (0) 2022.01.13
PGMS 점프와 순간이동  (0) 2022.01.10
PGMS 캐시  (0) 2022.01.10
PGMS 전력망을 둘로 나누기  (0) 2022.01.10
PGMS 거리두기 확인하기  (0) 2021.12.29