Sam의 집 주변에 사과나무와 오렌지나무가 있으며, 이 나무들에서 떨어지는 과일의 수를 계산하는 문제입니다.
Sam의 집은 일정한 구간에 위치해 있으며, 사과나무와 오렌지나무는 집의 양쪽에 위치합니다.
각 과일이 나무에서 떨어질 때, 나무로부터 어느 정도 떨어진 지점에 떨어집니다.
이 거리는 양수(오른쪽으로 떨어짐) 또는 음수(왼쪽으로 떨어짐)일 수 있습니다.
주어진 정보를 바탕으로 Sam의 집(지정된 구간)에 떨어지는 사과와 오렌지의 수를 결정합니다.
풀이 :
function countApplesAndOranges(s: number, t: number, a: number, b: number, apples: number[], oranges: number[]): void {
const positionApples = apples.filter(apple => s <= apple+a && t >= apple+a )
const positionOrenge = oranges.filter(orange => s <= orange+b && t >= orange+b )
console.log(positionApples.length)
console.log(positionOrenge.length)
}
먼저 각 과일이 떨어진 위치를 계산하기 위해, 나무의 위치와 과일이 떨어진 상대적 거리를 합산합니다. 이후, 샘의 집의 범위를 나타내는 s(최소값)와 t(최대값)를 기준으로, 해당 범위 안에 떨어진 과일들만을 선별합니다. 이를 위해 filter메서드를 사용하여, 각 과일의 최종 위치가 s와 t사이에 있는지 확인합니다. 마지막으로, 조건을 만족하는 과일들의 총 개수를 배열의 길이를 통해 구하여 결과로 출력합니다.
다른 풀이 :
function countApplesAndOranges(s: number, t: number, a: number, b: number, apples: number[], oranges: number[]): void {
const countFruits = (tree: number, fruits: number[]) => fruits.filter(fruit => {
const position = tree + fruit;
return position >= s && position <= t;
}).length;
console.log(countFruits(a, apples));
console.log(countFruits(b, oranges));
}
내부 함수를 통해 매개변수로 나무 위치와 과일이 떨어진 거리를 받아 과일의 위치를 계산하고 최소, 최대값을 비교한 다음 필터링 된 요소의 갯수를 반환합니다.
'Fundamentals > Algorithms' 카테고리의 다른 글
[해커랭크] Breaking the Records (0) | 2023.11.26 |
---|---|
[해커랭크] Number Line Jumps (0) | 2023.11.16 |
[해커랭크] Grading Students (0) | 2023.11.16 |
[해커랭크] Time Conversion (0) | 2023.11.16 |
[해커랭크] Birthday Cake Candles (0) | 2023.11.15 |