아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

다트 (Darts)

면접 대비

시간 제한1초메모리 제한256 MB

요약
최대 4개의 화살과 N개 영역 점수가 주어질 때, M을 넘지 않는 최대 합을 구하고 모든 합이 M을 넘으면 0을 출력한다.
난이도

보통10점 중 6점

유형
이분 탐색, 정렬, 완전 탐색, 투 포인터
정답자
아직 제출이 없습니다

문제

다음 규칙에 따라 다트 게임을 한다.

  • 과녁을 향해 화살을 최대 4개까지 던질 수 있다. 반드시 4개를 모두 던질 필요는 없으며, 한 개도 던지지 않아도 된다.
  • 과녁은 NN개의 부분으로 나뉘어 있고, 각 부분에는 점수 P1,…,PNP_1, \dots, P_N이 적혀 있다. 한 부분에 여러 화살이 꽂혀도 되며, 그때마다 그 부분의 점수가 더해진다.
  • 화살이 꽂힌 부분들의 점수 합 SS가 득점의 기준이 된다.
  • 미리 정해진 점수 MM에 대해, S≤MS \le M이면 SS가 그대로 득점이 된다. 그러나 SS가 MM을 초과하면 득점은 00점이 된다.

과녁에 적힌 점수들과 MM의 값이 주어질 때, 얻을 수 있는 득점의 최댓값을 구하는 프로그램을 작성하여라.

입력

표준 입력으로 다음 데이터가 주어진다.

  • 첫째 줄에 두 정수 NN과 MM이 공백으로 구분되어 주어진다. 과녁이 NN개의 부분으로 나뉘어 있고, 미리 정해진 점수가 MM임을 뜻한다.
  • 이어지는 NN개의 줄 중 ii번째 줄 (1≤i≤N1 \le i \le N)에는 정수 PiP_i가 주어진다. 이는 과녁의 ii번째 부분에 적힌 점수가 PiP_i임을 뜻한다.

출력

얻을 수 있는 득점의 최댓값을 한 줄에 출력한다.

제한

  • 1≤N≤10001 \le N \le 1000
  • 1≤M≤2×1081 \le M \le 2 \times 10^8
  • 1≤Pi≤1081 \le P_i \le 10^8

예제2

  1. 예제 1

    입력
    4 50
    3
    14
    15
    9
    
    예상 출력
    48
    
  2. 예제 2

    입력
    3 21
    16
    11
    2
    
    예상 출력
    20