문제 설명
당신은 여러 친구들에게 선물을 전달하는 일을 맡았습니다. 각각의 친구에게 선물을 전달하기 위해서는 그 친구의 고유한 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 };
});
}
위의 코드는 주어진 친구들의 정보를 받아서 각 친구가 선물을 받을 수 있는지를 판단하여 새로운 배열을 반환합니다.
세부 단계
-
함수 정의:
canGiftsBeReceived
라는 함수를 정의하고friends
라는 매개변수를 받습니다. 이 매개변수는 친구들의 정보가 담긴 배열입니다. -
배열 순회:
map
메서드를 통해 주어진 친구 배열을 순회합니다. 각 친구에 대해friend
라는 지역 변수를 사용합니다. -
조건 체크: 각 친구에 대해
signal
이true
이고friendId
가giftId
와 일치하는지를 체크하여canReceive
값에 결과를 저장합니다. -
결과 객체 생성: 각 친구의 정보를 기반으로 새로운 객체를 생성합니다. 이 객체는 기존 친구 정보와
canReceive
값을 포함합니다. - 결과 반환: 최종적으로 변환된 배열을 반환합니다.
예제 코드
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 }
]
위의 결과는 각 친구가 선물을 받을 수 있는지를 명확히 보여줍니다. 이 방법을 통해 선물을 안전하게 전달할 수 있습니다.
마무리
이번 강좌에서는 기본적인 배열과 객체를 활용한 문제 해결 방법을 살펴보았습니다. 알고리즘 문제를 해결하기 위해서는 문제를 체계적으로 분석하고 적절한 알고리즘을 적용하는 것이 중요합니다. 여러분이 자바스크립트를 통해 다양한 문제를 해결해 나가는 데 큰 도움이 되길 바랍니다.