📘 문제
https://programmers.co.kr/learn/courses/30/lessons/12982
저에게는 너무나도 어려운 알고리즘...너무 약하다고 생각이 들고 어디에서나 코딩테스트를 치는 지금 절실히 필요하다는 생각에 늦게나마 시작했습니다.
level 1 에서는 정렬, 배열을 활용한 문제가 많이 나오는 듯 싶습니다.
예산 문제 또한 정렬과 배열 활용이 중점입니다.
문제의 입력 예제를 보면
각 부서의 신청 예산과 전체 예산의 관계가 하나 보입니다. 모든 원소의 합과 budget 의 값이 같으면 원소의 수가 결과값이 됩니다.
처음 코드를 짤 때
d.forEach(data => {
sum += data;
});
forEach 문을 사용하여 짰는데 문제가 있습니다.
forEach 문은 특정 조건문을 사용하여 brack 가 안된다는 점이었습니다.
그래서 저는 forEach 문의 단점을 개선한 some 문을 사용하였습니다. 사용법은 forEach 문과 같습니다.
d.some(data => {
sum += data;
if(sum <= budget) count++;
else return true
// break 자체를 사용하면 안됩니다.
// return true 로 반복문을 빠져나갑니다.
})
중간에 문제로 sort()입니다.
작은 수 부터 더하여 많은 경우의 수를 찾아야 하는 문제이기에 정렬을 하여 더해야하는 데 여기서 제가 막연하게 sort() 를 사용하여 문제가 됩니다.
숫자를 정렬하려면
.sort((a, b) => (a - b))
로 제대로 숫자값으로 정렬해 줍시다. 일반적으로 sort() 는 유니코드 값으로 정렬이 되기 때문에 결과값에 영향을 미칩니다.
결과 제 코드입니다.
간단한 문제이지만 저는 한참 걸렸습니다. 부끄럽네요...