[๋ฌธ์ œ์„ค๋ช…]

๋ ˆ์Šคํ† ๋ž‘์„ ์šด์˜ํ•˜๋˜ ์Šค์นดํ”ผ๋Š” ์ฝ”๋กœ๋‚˜19๋กœ ์ธํ•œ ๋ถˆ๊ฒฝ๊ธฐ๋ฅผ ๊ทน๋ณตํ•˜๊ณ ์ž ๋ฉ”๋‰ด๋ฅผ ์ƒˆ๋กœ ๊ตฌ์„ฑํ•˜๋ ค๊ณ  ๊ณ ๋ฏผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๊ธฐ์กด์—๋Š” ๋‹จํ’ˆ์œผ๋กœ๋งŒ ์ œ๊ณตํ•˜๋˜ ๋ฉ”๋‰ด๋ฅผ ์กฐํ•ฉํ•ด์„œ ์ฝ”์Šค์š”๋ฆฌ ํ˜•ํƒœ๋กœ ์žฌ๊ตฌ์„ฑํ•ด์„œ ์ƒˆ๋กœ์šด ๋ฉ”๋‰ด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์„ ์กฐํ•ฉํ•ด์„œ ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด๋กœ ๊ตฌ์„ฑํ•˜๋ฉด ์ข‹์„ ์ง€ ๊ณ ๋ฏผํ•˜๋˜ "์Šค์นดํ”ผ"๋Š” ์ด์ „์— ๊ฐ ์†๋‹˜๋“ค์ด ์ฃผ๋ฌธํ•  ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ํ•จ๊ป˜ ์ฃผ๋ฌธํ•œ ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์„ ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด๋กœ ๊ตฌ์„ฑํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‹จ, ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด๋Š” ์ตœ์†Œ 2๊ฐ€์ง€ ์ด์ƒ์˜ ๋‹จํ’ˆ๋ฉ”๋‰ด๋กœ ๊ตฌ์„ฑํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ตœ์†Œ 2๋ช… ์ด์ƒ์˜ ์†๋‹˜์œผ๋กœ๋ถ€ํ„ฐ ์ฃผ๋ฌธ๋œ ๋‹จํ’ˆ๋ฉ”๋‰ด ์กฐํ•ฉ์— ๋Œ€ํ•ด์„œ๋งŒ ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด ํ›„๋ณด์— ํฌํ•จํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์†๋‹˜ 6๋ช…์ด ์ฃผ๋ฌธํ•œ ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์˜ ์กฐํ•ฉ์ด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๋ฉด,
(๊ฐ ์†๋‹˜์€ ๋‹จํ’ˆ๋ฉ”๋‰ด๋ฅผ 2๊ฐœ ์ด์ƒ ์ฃผ๋ฌธํ•ด์•ผ ํ•˜๋ฉฐ, ๊ฐ ๋‹จํ’ˆ๋ฉ”๋‰ด๋Š” A ~ Z์˜ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ ํ‘œ๊ธฐํ•ฉ๋‹ˆ๋‹ค.)

์†๋‹˜ ๋ฒˆํ˜ธ ์ฃผ๋ฌธํ•œ ๋‹จํ’ˆ๋ฉ”๋‰ด ์กฐํ•ฉ
1๋ฒˆ ์†๋‹˜ A, B, C, F, G
2๋ฒˆ ์†๋‹˜ A, C
3๋ฒˆ ์†๋‹˜ C, D, E
4๋ฒˆ ์†๋‹˜ A, C, D, E
5๋ฒˆ ์†๋‹˜ B, C, F, G
6๋ฒˆ ์†๋‹˜ A, C, D, E, H
๊ฐ€์žฅ ๋งŽ์ด ํ•จ๊ป˜ ์ฃผ๋ฌธ๋œ ๋‹จํ’ˆ๋ฉ”๋‰ด ์กฐํ•ฉ์— ๋”ฐ๋ผ "์Šค์นดํ”ผ"๊ฐ€ ๋งŒ๋“ค๊ฒŒ ๋  ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด ๊ตฌ์„ฑ ํ›„๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ฝ”์Šค ์ข…๋ฅ˜ ๋ฉ”๋‰ด ๊ตฌ์„ฑ ์„ค๋ช…
์š”๋ฆฌ 2๊ฐœ ์ฝ”์Šค A, C 1๋ฒˆ, 2๋ฒˆ, 4๋ฒˆ, 6๋ฒˆ ์†๋‹˜์œผ๋กœ๋ถ€ํ„ฐ ์ด 4๋ฒˆ ์ฃผ๋ฌธ๋์Šต๋‹ˆ๋‹ค.
์š”๋ฆฌ 3๊ฐœ ์ฝ”์Šค C, D, E 3๋ฒˆ, 4๋ฒˆ, 6๋ฒˆ ์†๋‹˜์œผ๋กœ๋ถ€ํ„ฐ ์ด 3๋ฒˆ ์ฃผ๋ฌธ๋์Šต๋‹ˆ๋‹ค.
์š”๋ฆฌ 4๊ฐœ ์ฝ”์Šค B, C, F, G 1๋ฒˆ, 5๋ฒˆ ์†๋‹˜์œผ๋กœ๋ถ€ํ„ฐ ์ด 2๋ฒˆ ์ฃผ๋ฌธ๋์Šต๋‹ˆ๋‹ค.
์š”๋ฆฌ 4๊ฐœ ์ฝ”์Šค A, C, D, E 4๋ฒˆ, 6๋ฒˆ ์†๋‹˜์œผ๋กœ๋ถ€ํ„ฐ ์ด 2๋ฒˆ ์ฃผ๋ฌธ๋์Šต๋‹ˆ๋‹ค.

๊ฐ ์†๋‹˜๋“ค์ด ์ฃผ๋ฌธํ•œ ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์ด ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ๋‹ด๊ธด ๋ฐฐ์—ด orders, "์Šค์นดํ”ผ"๊ฐ€ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์–ดํ•˜๋Š” ์ฝ”์Šค์š”๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด course๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, "์Šค์นดํ”ผ"๊ฐ€ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋  ์ฝ”์Šค์š”๋ฆฌ์˜ ๋ฉ”๋‰ด ๊ตฌ์„ฑ์„ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

์กฐํ•ฉ

์กฐํ•ฉ์€ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์กฐํšŒํ•˜๋˜, ์ค‘๋ณต๋˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ์ œ๊ฑฐํ•œ๋‹ค

์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Œ

function getCombination(arr,fixNum) {
  	// ์กฐํ•ฉ์„ ๋‹ด์„ ๋ฐฐ์—ด
	const results = []
    if(fixNum === 1) return arr.map(el => [el])
  	
  	arr.forEach((fixed,idx,origin) => {
    	const nextArr = origin.slice(idx+1)
        const combArr = getCombination(nextArr,fixNum-1)
        const fixAndCombArr = combArr.map(el => [fixed,...el])
        results.push(fixAndCombArr)
    })
  	return results
}

๋ชจ๋“  ์กฐํ•ฉ์˜ ์ˆ˜๊ฐ€ return๋œ๋‹ค.

์ˆœ์—ด

์ˆœ์—ด์€ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์กฐํšŒํ•˜๋˜, ์ค‘๋ณต๋˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ ๋˜ํ•œ ํฌํ•จํ•œ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Œ

function getPermutation(arr,fixNum) {
  	// ์กฐํ•ฉ์„ ๋‹ด์„ ๋ฐฐ์—ด
	const results = []
    if(fixNum === 1) return arr.map(el => [el])
  	
  	arr.forEach((fixed,idx,origin) => {
      // ์กฐํ•ฉ๊ณผ์˜ ์ฐจ์ด์ ์€ ๋‹ค์Œ ์ธ์ž๋กœ ๋„˜๊ธธ ๋ฐฐ์—ด์˜ ๊ธธ์ด
    	const nextArr = [...origin.slice(0,idx),...origin.slice(idx+1)]
        const perArr = getPermutation(nextArr,fixNum-1)
        const fixAndCombArr = perArr.map(el => [fixed,...el])
        results.push(fixAndCombArr)
    })
  	return results
}

๋ชจ๋“  ์ˆœ์—ด์˜ ์ˆ˜๊ฐ€ return๋œ๋‹ค.

๋ฌธ์ œํ’€์ด

function getCombinations(arr,select) {
    let results = []
    if(select === 1) return arr.map(a => [a])
    
    arr.forEach((item,idx,origin) => {
        const outFix = origin.slice(idx+1)
        const combArr = getCombinations(outFix,select-1)
        const attach = combArr.map(el => [item,...el].join(""))
        results.push(...attach)
    })
    return results
}

function solution(orders, course) {
    // ์ •๋‹ต ๋ฐฐ์—ด ์ƒ์„ฑ
    const result = []
    // ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฉ”๋‰ด๋ฅผ ๋‹ด์„ ๋ฐฐ์—ด ์ƒ์„ฑ
    const allFoods = []
    // ๊ฐ ๋ฉ”๋‰ด ๋ณ„ ํ˜ธ์ถœ ํšŸ์ˆ˜๋ฅผ ๋‹ด์„ ๊ฐ์ฒด ์ƒ์„ฑ
    const callFoods = {}
    // ๊ฐ ๋ฉ”๋‰ด ์ˆซ์ž ๋ณ„ ์ตœ๋Œ€๊ฐ’
    let maxOrder = Array(course.length).fill(0)
    orders.forEach(a => {
        // a ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ ๋ฌธ์ž์—ด๋กœ ๋ณ€๊ฒฝ
        a = a.split('').sort()
        // ์ด๋ฒˆ ์˜ค๋”์˜ ์Œ์‹ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹ด์Œ
        const nowFoods = []
        for(let i = a.length ; i > 1 ; i --) {
            getCombinations(a,i).map(el => {
                nowFoods.push(el)
            })
        }
        console.log(nowFoods)
        // ์ด๋ฒˆ ์˜ค๋”์˜ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ณ  ์ „์ฒด ์Œ์‹ ๋ฆฌ์ŠคํŠธ์— ํ‘ธ์‹œ
        nowFoods.filter((b,i) => nowFoods.indexOf(b) === i).forEach(c => allFoods.push(c))
    })
    // ๊ฐ ๋ฉ”๋‰ด ๋ณ„ ํ˜ธ์ถœ ํšŸ์ˆ˜ ์ดˆ๊ธฐํ™”
    allFoods.forEach(a => {
        callFoods[a] = 0
    })
    // ํ˜ธ์ถœ ํšŸ์ˆ˜ ์นด์šดํŠธ
    allFoods.forEach(a => {
        callFoods[a]++
    })
    // ๊ฐ ๋ฉ”๋‰ด ์ˆซ์ž ๋ณ„ ์ตœ๋Œ€ ๊ฐ’ ๊ตฌํ•˜๊ธฐ
    for(const [key,val] of Object.entries(callFoods)) {
        val > maxOrder[course.indexOf(key.length)] ? maxOrder[course.indexOf(key.length)] = val : null 
    }
    // ๋‘๋ช… ์ด์ƒ์ด ์ฃผ๋ฌธํ–ˆ์œผ๋ฉฐ ์ฃผ๋ฌธ ์ฝ”์Šค์˜ ๊ธธ์ด๊ฐ€ course ๋ฐฐ์—ด์— ์žˆ๋Š” orders ๋ฐฐ์—ด์˜ key
    for(const [key,val] of Object.entries(callFoods)) {
        if(val >= 2 && course.includes(key.length) && val === maxOrder[course.indexOf(key.length)]) {
            result.push(key)
        }
    }
    return result.sort()
}
profile
๋‚ด ์ง€์‹์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋‹ดํ•จ

0๊ฐœ์˜ ๋Œ“๊ธ€