問題へのリンク
解答コード
詳細
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
final int N = scanner.nextInt();
final int M = scanner.nextInt();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < M; i++) {
final int W = scanner.nextInt();
int quotinent = W / N;
int remainder = W % N;
if (quotinent == 0 || remainder * 2 >= N) {
quotinent++;
}
sb.append(quotinent * N).append("\n");
}
System.out.println(sb);
scanner.close();
}
}
解説
詳細
Wを一度Nで割った商によって箱分け、余りで前後の箱の細かな振り分けをするといいでしょう。
ただ、間違いやすいポイントが多い問題です。
・0のBOXが無い ⇒ 商=0の時は強制切り上げ
・N = 偶数の時 : 大きな箱と小さな箱、等距離なら大きい箱 ⇒ >= と >の間違い
・N = 奇数の時 : Nを2で割ると端数切捨ててしまう ⇒ Nを割るのではなく余りを倍にする