innn

프로그래머스_level1_예산 본문

코딩 테스트/코테 문제 풀이

프로그래머스_level1_예산

33삼 2023. 4. 10. 15:19

1. 배열 d에 있는 숫자들(요소들)을 오름차순으로 정렬한다.

2. 배열 앞에서부터 순서대로 더해가면서 budget 을 초과하지 않는 최대 개수의 숫자들을 찾는다. 

 

아래는 한 줄 한 줄 해석.

function solution(d, budget) {
  // 함수 solution은 배열 d와 숫자 budget을 받는다.
  let answer = 0; // 최대 개수를 나타내는 변수 answer을 0으로 초기화한다.
  let money = 0; // 현재까지의 예산 사용 금액을 나타내는 변수 money를 0으로 초기화 한다.

  d.sort((a, b) => a - b) // 배열 d을 오름차순으로 정렬한다.
    .forEach(function (val) {
      // 정렬된 배열에서 각각의 요소 val에 대해 다음의 함수를 실행한다.
      money += val; // val 을 money에 더한다.
      if (money <= budget)
        // money가 budget을 초과하지 않는다면
        answer++; // answer를 1 증가시킨다.
    });
  return answer; // answer을 반환한다
}

 

여기서 

d.sort((a, b) => a - b) 는 두 개의 숫자 a, b를 비교하여 a가 b보다 작으면 음수, 같으면 0, 크면 양수를 반환하는 연산이다.

d.sort((a, b) => a - b) 는 배열 d의 요소들을 'a-b'를 기준으로 오름차순 정렬하는 것을 의미한다.

 

예를 들어, d가 [3, 1, 2, 4, 5] 인 경우 d.sort((a, b) =>  a - b) 는 배열 d를 [1, 2, 3, 4, 5]로 정렬한다.

만약 d를 내림차순으로 정렬하고 싶다면, d.sort((a, b) => b - a)와 같이 b - a를 기준으로 정렬해주면 된다. 

 

앞의 숫자에서 뒤의 숫자를 뺀 결과를 반환한다. a - b 가 음수가 된다는 것은 a가 b보다 작다는 것을 의미한다.

따라서 a - b 를 이용한 정렬에서는 오름차순으로 정렬하고자 하는 배열에서 작은 값이 앞쪽에 위치하도록 정렬된다. 

 

 

여기서 22

forEach()는 배열 메소드 중 하나로, 배열의 각 요소에 대해 지정한 콜백 함수를 실행하는 메소드이다.

forEach() 메소드는 배열의 각 요소를 반복하면서, 각 요소에 대해 콜백 함수를 실행하게 된다. 이때, 콜백 함수는 배열의 각 요소를 가리키는 매개변수를 사용하여 실행된다.

array.forEach(funcion(currentValue, index, array){
	// 콜백 함수 실행 내용
}, thisArg)

위 문법에서 currentValue는 배열의 현재 요소의 값, index는 현재 요소의 인덱스 값, array는 배열 자체를 의미한다.

thisArg는 콜백 함수 내에서 this 키워드가 가리킬 대상을 지정하는 옵션 매개 변수이다.

forEach() 메소드를 사용하면 반복문을 사용하는 것보다 간결하게 코드를 작성할 수 있다. 

또한 콜백 함수를 사용하여 각 요소에 대해 복잡한 연산을 실행할 수 있다.