AI Native 레벨별 코테

레벨 2 · 실전 · 상태와 작업 흐름

중복 웹훅과 잔액 집계

재전송 이벤트를 한 번만 적용하고 계좌 잔액을 집계합니다.

문제 설명

function solution(events)를 작성하세요. 입력과 출력은 모두 JSON으로 표현 가능한 값입니다. 입력 배열과 객체를 직접 변경하면 안 돼요. 외부 라이브러리, 네트워크 요청, 비동기 함수는 사용할 수 없어요. events:{id:string,account:string,delta:integer}[]. id의 첫 이벤트만 수락합니다. 같은 id의 다른 계좌·금액 이벤트도 무시합니다. 문자열은 대소문자를 구분합니다. accepted는 입력 이벤트별 boolean. 수락된 delta를 계좌별 합산하고, 0 잔액도 포함해 account의 JavaScript 문자열 오름차순으로 정렬합니다. {accepted,balances:[{account,balance}]}를 반환합니다. 합계는 안전한 정수입니다. 입력 범위: 각 입력 배열은 최대 50,000개 항목, 문자열은 최대 1,000자입니다. 숫자는 유한한 값이며, 정수와 합산 결과는 JavaScript의 안전한 정수 범위 안에 있습니다. 그 외 자료형과 유효성 조건은 위 규칙을 따릅니다.

입출력 예시

예시 1

함수 인자

[
  [
    {
      "id": "x",
      "account": "a",
      "delta": 10
    },
    {
      "id": "x",
      "account": "a",
      "delta": 99
    }
  ]
]

반환값

{
  "accepted": [
    true,
    false
  ],
  "balances": [
    {
      "account": "a",
      "balance": 10
    }
  ]
}
예시 2

함수 인자

[
  [
    {
      "id": "x",
      "account": "b",
      "delta": 2
    },
    {
      "id": "y",
      "account": "a",
      "delta": -3
    }
  ]
]

반환값

{
  "accepted": [
    true,
    true
  ],
  "balances": [
    {
      "account": "a",
      "balance": -3
    },
    {
      "account": "b",
      "balance": 2
    }
  ]
}
예시 3

함수 인자

[
  [
    {
      "id": "a",
      "account": "A",
      "delta": 1
    },
    {
      "id": "b",
      "account": "a",
      "delta": 1
    }
  ]
]

반환값

{
  "accepted": [
    true,
    true
  ],
  "balances": [
    {
      "account": "A",
      "balance": 1
    },
    {
      "account": "a",
      "balance": 1
    }
  ]
}
연습에는 포인트·제한 시간·제출 횟수가 없습니다. AI와 검색을 자유롭게 활용하고, 로그인 후 공개 예제를 실행하거나 로컬에서 검증하세요.

60 / 20,000자

내 테스트 추가 · 선택

events 순서의 인자를 JSON 배열로 입력하세요. 예제 3개와 이 테스트를 함께 실행합니다.

예제 검증 파일

두 파일을 같은 폴더에 저장하고 Node.js로 아래 명령을 실행하세요. 결과의 checks에서 예제별 통과 여부를 볼 수 있습니다.

node verify-webhook-idempotency.mjs
문의하기

서비스명: 포트포올
문의는 운영자에게 이메일로 전송됩니다.

이메일과 문의 내용은 답변을 위해 운영자 및 메일 발송 서비스로 전송됩니다. 비밀번호·결제정보·민감한 개인정보는 입력하지 마세요.