https://school.programmers.co.kr/learn/courses/30/lessons/72411?language=javascript
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
까다로웠던 문제..
일단 모든 조합들을 찾는대에 있어서 까다로움이 있었다.
이는 조합을 구하는 코드를 다른 블로그에서 인용함
// 조합을 구하는 공식 참고
const getCombination = (arr, selectNumber) => {
const results = [];
if (selectNumber===1) return arr.map((el) => [el])
arr.forEach((fixed, index, origin) => {
const rest = origin.slice(index +1);
const combinations = getCombination(rest, selectNumber - 1);
const attached = combinations.map((el) => [fixed, ...el]);
results.push(...attached);
})
return results
}
조합 공식을 보면.. 재귀로 조합을 구하였음을 알 수 있다.
이제 전체 식
// 조합을 구하는 공식 참고
const getCombination = (arr, selectNumber) => {
const results = [];
if (selectNumber===1) return arr.map((el) => [el])
arr.forEach((fixed, index, origin) => {
const rest = origin.slice(index +1);
const combinations = getCombination(rest, selectNumber - 1);
const attached = combinations.map((el) => [fixed, ...el]);
results.push(...attached);
})
return results
}
function solution(orders, course) {
var answer = [];
course.forEach(c => {
var obj = {}
orders.forEach(order => {
// 문자열을 배열로 하나씩 만들어줌 ex) 'abc' -> ['a','b','c']
var arr = [...order].sort()
const getCombinations = getCombination(arr, c)
getCombinations.forEach(element => {
// 조합으로 나온 array를 다시 문자열로 붙여줌
var b =element.join('')
// obj라는 빈 object에 하나씩 더해줌
if (b in obj ===false) {
obj[b] = 1
}
else {
obj[b] +=1
}
});
});
// Max값을 구하는 식인데, value들만 가지고 array를 만듬
let Maxarr = Object.values(obj)
let Max = Math.max(...Maxarr)
// 2명 이상의 손님에게 주문을 받아야 가능
if (Maxarr.length!==1 && Max!==1) {
// 2명 이상 주문받은 코스메뉴 후보중 가장 많은 선택을 받은 코스요리 선정
for(var ob in obj) {
if (Max === obj[ob]) {
answer.push(ob)
}
}
}
});
// 출력값을 위해 sort 해줌
answer.sort()
return answer;
}
문제를 처음엔 잘 이해하지 못해서 헛짓을 좀 했다ㅠㅠ
새롭게 알게 된 사실
- object도 for문이 가능하다!
for(var ob in obj) {
if (Max === obj[ob]) {
answer.push(ob)
}
}
// for in문을 써서 object를 ob(key)값으로 하나씩 불러 낼 수 있음!
- object의 value들만 모아 array로 만드는 코드
let arr = Object.values(obj)
- array의 Max값을 구하는 코드
let Max = Math.max(...Maxarr)
- 배열을 string으로 변환하는 코드
var b =element.join('')
'Algorithm > programmers' 카테고리의 다른 글
programmers: 핸드폰 번호 가리기 (0) | 2022.10.14 |
---|---|
programmers: 부족한 금액 계산하기 (0) | 2022.10.14 |
programmers: 메뉴리뉴얼 (0) | 2022.10.12 |
[JS]programmers k진수에서 소수 개수 구하기 (0) | 2022.09.27 |
programmers k진수에서 소수 개수 구하기 (0) | 2022.09.22 |
댓글