일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- app router
- 투포인터
- 인터섹션
- ESlint
- webpack
- 공변성
- async/await
- autosize
- 태그된 유니온
- SSR
- map
- recoil
- 호이스팅
- React
- Cypress
- 무한 스크롤
- dfs
- CORS
- 타입 좁히기
- 결정 알고리즘
- Promise
- 반공변성
- Jest
- tailwind
- RTK Query
- 이분 검색
- TS
- CI/CD
- 리터럴 타입
- useAppDispatch
Archives
- Today
- Total
짧은코딩
졸업 선물 본문
반응형
해결법
이 문제는 가장 비싼 선물을 할인 받는다고 해서 선물 받을 수 있는 최대 학생 수를 구할 수 없다. 따라서 모든 경우의 수를 다 해봐야 한다. 그래도 가장 싼 선물부터 계산해보는 것이 효율적이니 오름차순으로 정렬을 했다.
그리고 for문으로 첫 번째 선물부터 마지막 선물까지 다 할인을 적용했다치고 각 경우에 대해서 계산을 해야한다. 따라서 이중 for문을 이용해서 이를 구한다. 각 선물을 계산 할 때 마다 cnt 변수를 ++해준다. 주의할 점은 product와 m은 계속 써야하는 변수라서 다른 변수에 넣어두고 사용해야 한다.
그 후에 answer에 answer, cnt 값 중 더 큰 것을 넣어주면 된다.
코드
<html>
<head>
<meta charset="UTF-8" />
<title>출력결과</title>
</head>
<body>
<script>
function solution(m, product) {
let answer = 0;
product.sort((a, b) => a[0] + a[1] - (b[0] + b[1]));
for (let i = 0; i < product.length; i++) {
let money = m - (product[i][0] / 2 + product[i][1]);
let cnt = 1;
for (let j = 0; j < product.length; j++) {
if (i !== j && product[j][0] + product[j][1] > money) break;
if (i !== j && product[j][0] + product[j][1] <= money) {
money -= product[j][0] + product[j][1];
cnt++;
}
}
answer = Math.max(answer, cnt);
}
return answer;
}
let arr = [
[6, 6],
[2, 2],
[4, 3],
[4, 5],
[10, 3],
];
console.log(solution(28, arr));
</script>
</body>
</html>
반응형
'코딩테스트 with JS > 자바스크립트 알고리즘 문제풀이(인프런)' 카테고리의 다른 글
공통원소 구하기(투 포인터) (0) | 2022.08.22 |
---|---|
K번째 큰 수 (0) | 2022.08.21 |
멘토링 (0) | 2022.08.21 |
문자열 압축 (0) | 2022.08.17 |
가장 짧은 문자거리 (0) | 2022.08.16 |
Comments