Section4_4번: 졸업선물
function solution4_4(M: number, arr: Array<number[]>): any {
let sortedWish: Array<number[]> = [];
//쿠폰+배송비 적용시 낮은 가격순
sortedWish = arr.sort((a, b) => ((a[0]/2+a[1]) - (b[0]/2+b[1])));
let total = 0;
let count:number = 1;
// 낮은 가격부터 추가하면서 마지막 상품에 쿠폰을 적용시켜보고 예산보다 적으면 다시 빼기
sortedWish.push([100000, 100000])
for (let i=0; i<sortedWish.length; i++) {
const priceNoCoupon = sortedWish[i][0] + sortedWish[i][1] ;
const priceUseCoupon = sortedWish[i+1][0]/2 + sortedWish[i+1][1];
total += priceNoCoupon+priceUseCoupon;
if(total <= M) {
count++;
total -= priceUseCoupon;
}else break;
}
return count;
}
console.log(
solution4_4(28, [[6, 6], [2, 2], [4, 3], [4, 5], [10, 3]])
);
- 쿠폰+배송비 적용시 낮은가격 순으로 정렬 후, 마지막 가격에 쿠폰을 적용해 보면서 예산(M)이랑 비교함
- for문이 돌때마다 새로운 블록스코프가 만들어지기 때문에 const선언이 가능하다.
- for문에서 빠져나가려면 break;
- 배열에서 없는 인덱스 계산하려고 하면 undefined 뜨니까
헤멨던 부분)
4가 나와야 할텐데 왜 7이 나올까 -> while문 동작 다시 이해하기
let sum = 0;
let count = 0;
for (let ele of sortedWish) {
while (sum < M) {
sum += (ele[0] + ele[1]);
count++;
} //while 조건이 맞으니까 이 스코프 안에서만 계~속 반복했다.
}
return count;
Section4_5번: K번째 큰 수
function solution4_5(N: number, K: number, arr: number[]): any {
let answer = 0;
let sumsThreeNum: Set<number> = new Set();
// 타입을 별도로 지정해주지 않으면 Set<unknown> 타입이 된다.
for (let i = 0; i < N; i++) {
for (let j = i + 1; j < N; j++) {
for (let k = j + 1; k < N; k++) {
sumsThreeNum.add(arr[i] + arr[j] + arr[k]);
}
}
}
const sortedSums = [...sumsThreeNum].sort((a, b) => b - a);
return sortedSums[K-1]
}
console.log(solution4_5(10, 3, [13, 15, 34, 23, 45, 65, 33, 11, 26, 42]));
- Set 개체를 중복 제거할때만 사용했었는데 알고보니까 관련된 메소드 들이 있었다.
중복을 제거하는 Set 개체에 add() 메서드를 사용하면 개체의 맨 뒤에 해당 요소가 추가된다.
이번 풀이에서는 .add() 메소드를 사용해서 숫자 3개를 더한 값을 추가하는 식으로 사용했다.
- 타입스크립트 - unknown 타입!
처음에 타입 없이 Set 개체를 선언하고 풀어나갔는데 마지막에 sort를 하려니 타입 오류가 뜨면서 정렬을 할 수 없었다.
당연히 숫자(arr[i]) 가 들어갔으니 연산도 되어야 하는게 아닌가 하고 헤맸는데
unknown 타입의 개체에는 모든 타입이 담겨질 수 있지만,
숫자가 들어와도 number타입이 아닌 unknown타입이라 연산은 불가능 하는 것을 알게 됐다.
Set도 Set<> 이렇게 타입으로 줄 수 있다는것도 이번에 알게 됐다.
'알고리즘(with TS)' 카테고리의 다른 글
알고리즘 풀이 5)6-8 (해쉬) (0) | 2023.02.06 |
---|---|
알고리즘 풀이 5)1-5 (투포인터 알고리즘, 슬라이드윈도우) (0) | 2023.01.29 |
알고리즘 풀이 4)1-3 (완전탐색-블루투포스) (0) | 2023.01.23 |
알고리즘 풀이 3)4-5 (0) | 2023.01.23 |
알고리즘 풀이 2)6-7, 3)1-3 & TS(isNaN 사용시 주의할 부분) (0) | 2023.01.19 |