예제풀기
문제
머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다. 양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다. 정수 n과 k가 매개변수로 주어졌을 때, 양꼬치 n인분과 음료수 k개를 먹었다면 총얼마를 지불해야 하는지 return 하도록 solution 함수를 완성해보세요.
📝정답
function solution(n, k) {
if(n>=10){
k-= ~~(n/10)
}
return 12000*n + 2000*k;
}
해석
이 함수는 두 개의 매개변수 n과 k를 받습니다.
함수 내부에서는 조건문을 사용하여 n이 10 이상인 경우에 k의 값을 변경하고 있습니다.
🎈~~ 연산자
- 소수 부분을 버리고 정수 부분만 남깁니다.
- 양수와 음수를 구분하지 않고 소수점 아래를 버리기 때문에 양수를 음수로 변환하지 않습니다. 즉, 양수를 ~~ 연산자로 처리하면 소수점 이하를 버리고 그대로 양수를 반환합니다.
- 32비트 정수 범위 내에서만 동작합니다. 만약 변환된 값이 32비트 정수 범위를 벗어난다면, 원하지 않는 결과가 발생할 수 있습니다.
- 예를 들어, ~~ 연산자를 사용하여 숫자 3.14를 처리한다면, 결과는 3이 됩니다. 마찬가지로, 숫자 -7.89를 처리한다면 결과는 -7이 됩니다. 이러한 소수점 이하를 버리고 정수 부분만 남기는 연산은 어떤 상황에서 필요한 경우에 유용하게 사용될 수 있습니다.
~~(n/10)는 n을 10으로 나눈 몫을 소수점 이하를 버리고 구하는 연산입니다. 따라서 k에서는 n을 10으로 나눈 몫을 뺀 값을 할당받습니다.
마지막으로 함수는 12000*n + 2000*k를 반환합니다. 이는 n과 k를 사용하여 계산된 결과값입니다. n은 12000에 곱해지고, k는 2000에 곱해진 후 더해진 결과입니다.
문제
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.
해석
📝정답1)
function solution(numbers) {
var answer = 0;
for(i of numbers) {
answer += i
}
return answer / numbers.length;
}
numbers 배열의 요소들을 모두 더한 후 배열의 길이로 나눈 평균값을 반환하는 solution 함수를 정의하고 있습니다.
reduce 메서드를 사용하여 배열의 요소들을 순회하면서 누적 값을 계산합니다. 초기값으로 0을 설정한 후, 각 요소를 더해 누적 값을 업데이트합니다.
(a, c) => (a + c)는 화살표 함수로서 현재까지의 누적 값(a)과 현재 요소(c)를 더한 값을 반환하는 함수입니다. reduce 메서드는 이 함수를 반복적으로 적용하여 누적 값을 계산합니다.
계산된 누적 값에 배열의 길이(numbers.length)로 나누어 평균 값을 구합니다. 그리고 평균 값을 반환합니다.예를 들어, numbers 배열이 [1, 2, 3, 4, 5]인 경우, 요소들의 합인 15를 배열의 길이 5로 나눈 3이 평균 값으로 반환됩니다.
📝정답2)
function solution(numbers) {
return numbers.reduce((a,c) => (a+c),0)/numbers.length;
}
해석
numbers 배열의 요소들을 모두 더한 후 배열의 길이로 나눈 평균값을 반환하는 solution 함수를 정의하고 있습니다.
먼저, 초기값으로 answer 변수를 0으로 설정합니다. 그리고 for...of 루프를 사용하여 numbers 배열의 요소들을 순회합니다.
for...of 루프는 배열을 순회하며 각 요소를 i에 할당하여 반복문을 실행합니다. 반복문 내부에서는 answer에 현재 요소인 i를 더하여 누적합니다.
반복문이 모두 실행된 후, answer를 배열의 길이(numbers.length)로 나누어 평균 값을 계산합니다.
평균 값을 반환합니다.
이 코드는 numbers 배열의 요소들을 더한 후 평균 값을 계산하여 반환하는 기능을 수행합니다.
예를 들어, numbers 배열이 [1, 2, 3, 4, 5]인 경우, 요소들의 합인 15를 배열의 길이 5로 나눈 3이 평균 값으로 반환됩니다.