Subscribed unsubscribe Subscribe Subscribe

yukicoder No.5 数字のブロック

Problem

No.5 数字のブロック - yukicoder

考えたこと

与えられたブロックの幅を格納した配列をソートする。 ブロックの幅の累積和を計算していく。 累積和が箱の幅Lより大きくなったらその一つ前までのブロックが 箱に入る最大の数なので出力する。

Code

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int L = Integer.parseInt(reader.readLine());
        int N = Integer.parseInt(reader.readLine());
        String[] line = reader.readLine().split(" ");
        int[] blocks = new int[N + 1];
        for (int i = 0; i < N; i++) {
            blocks[i + 1] = Integer.parseInt(line[i]);
        }

        Arrays.sort(blocks);

        int counter = 0;
        for (int i = 1; i <= N; i++) {
            blocks[i] = blocks[i - 1] + blocks[i];
            if (blocks[i] > L) {
                break;
            } else {
                counter += 1;
            }
        }
        System.out.println(counter);
    }
}

コードの説明

int[] blocks = new int[N + 1];

配列の一番目の値を0にして、そのあとにブロックの幅を格納していきたいため。

 for (int i = 1; i <= N; i++) {
            blocks[i] = blocks[i - 1] + blocks[i];
            if (blocks[i] > L) {
                break;
            } else {
                counter += 1;
            }
        }

blocks[i] = blocks[i - 1] + blocks[i];のようにしたいため i=1から始める

Remove all ads