자바스크립트 코딩테스트 강좌, 선물 전달하기

문제 설명

당신은 여러 친구들에게 선물을 전달하는 일을 맡았습니다. 각각의 친구에게 선물을 전달하기 위해서는 그 친구의 고유한 ID가 필요합니다. 모든 친구의 ID와 선물의 ID가 주어질 때, 선물을 전달할 수 있는지를 확인해야 합니다.

문제 정의

각 친구들은 다음과 같은 정보를 가지고 있다고 가정합니다:

  • 친구의 ID
  • 받고 싶은 선물의 ID
  • 선신호 (이 친구가 선물을 받을 수 있는지 여부)

입력으로 주어지는 배열에는 여러 친구들의 정보가 담겨 있습니다. 이 배열에서 각 친구의 ID와 받고 싶은 선물의 ID를 기준으로, 정확하게 선물을 전달할 수 있는지를 판단하는 함수를 작성하시오.

입력 형식


    [
        { friendId: 1, giftId: 101, signal: true },
        { friendId: 2, giftId: 102, signal: false },
        { friendId: 3, giftId: 101, signal: true }
    ]
    

출력 형식


    [
        { friendId: 1, giftId: 101, canReceive: true },
        { friendId: 2, giftId: 102, canReceive: false },
        { friendId: 3, giftId: 101, canReceive: true }
    ]
    

문제 해결 방법

이 문제를 해결하기 위해서는 각 친구의 정보가 담긴 배열을 순회하면서 선물 받을 수 있는지를 판단해야 합니다. 기본적으로 friend’s ID와 gift’s ID가 일치하면 선물을 받을 수 있다고 판단할 수 있습니다. 그러나 friend의 signal 값이 false인 경우 선물을 받을 수 없기 때문에 이를 고려해야 합니다.

알고리즘 설명


    function canGiftsBeReceived(friends) {
        return friends.map(friend => {
            const canReceive = (friend.signal === true && friend.friendId === friend.giftId);
            return { ...friend, canReceive: canReceive };
        });
    }
    

위의 코드는 주어진 친구들의 정보를 받아서 각 친구가 선물을 받을 수 있는지를 판단하여 새로운 배열을 반환합니다.

세부 단계

  1. 함수 정의: canGiftsBeReceived라는 함수를 정의하고 friends라는 매개변수를 받습니다. 이 매개변수는 친구들의 정보가 담긴 배열입니다.
  2. 배열 순회: map 메서드를 통해 주어진 친구 배열을 순회합니다. 각 친구에 대해 friend라는 지역 변수를 사용합니다.
  3. 조건 체크: 각 친구에 대해 signaltrue이고 friendIdgiftId와 일치하는지를 체크하여 canReceive 값에 결과를 저장합니다.
  4. 결과 객체 생성: 각 친구의 정보를 기반으로 새로운 객체를 생성합니다. 이 객체는 기존 친구 정보와 canReceive 값을 포함합니다.
  5. 결과 반환: 최종적으로 변환된 배열을 반환합니다.

예제 코드


    const friends = [
        { friendId: 1, giftId: 101, signal: true },
        { friendId: 2, giftId: 102, signal: false },
        { friendId: 3, giftId: 101, signal: true }
    ];

    const result = canGiftsBeReceived(friends);
    console.log(result);
    

결과


    [
        { friendId: 1, giftId: 101, signal: true, canReceive: true },
        { friendId: 2, giftId: 102, signal: false, canReceive: false },
        { friendId: 3, giftId: 101, signal: true, canReceive: true }
    ]
    

위의 결과는 각 친구가 선물을 받을 수 있는지를 명확히 보여줍니다. 이 방법을 통해 선물을 안전하게 전달할 수 있습니다.

마무리

이번 강좌에서는 기본적인 배열과 객체를 활용한 문제 해결 방법을 살펴보았습니다. 알고리즘 문제를 해결하기 위해서는 문제를 체계적으로 분석하고 적절한 알고리즘을 적용하는 것이 중요합니다. 여러분이 자바스크립트를 통해 다양한 문제를 해결해 나가는 데 큰 도움이 되길 바랍니다.

© 2023 알고리즘 문제풀이 강좌