본문 바로가기

Fundamentals/Algorithms

[해커랭크] Apple and Orange

문제링크

 

Apple and Orange | HackerRank

Find the respective numbers of apples and oranges that fall on Sam's house.

www.hackerrank.com

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