{ }codelper
合計P0342

交互に投げたダーツの点数

ジウとミンソがダーツを一回ずつ交互に投げる。
ジウが先に投げ、次にミンソが投げ、またジウが投げるという順番が最後まで続く。
一行目に、二人が投げた回数を合わせた n が与えられる。
二行目に、投げるたびに得た点数 n 個が投げた順に空白一つずつで区切って与えられる。
ジウが得た点数の合計とミンソが得た点数の合計を、この順に空白一つで区切って一行に出力せよ。
n が 1 のとき、ミンソは一度も投げていないので、ミンソの合計は 0 である。

入力
1 ≤ n ≤ 1,000、0 ≤ 点数 ≤ 10,000(整数、カンマなしの数字だけで与えられる)
出力
ジウの合計とミンソの合計を空白一つで区切った一行
例 1 · stdin
5
3 7 5 0 10
stdout
18 7
例 2 · stdin
1
8
stdout
8 0
main.py
入力(stdin)

実行すると、これらの行が順に input()・標準入力に渡されます(実行中に入力を求めません)。

$ 準備完了

コードを入力して解くにはパソコンで開いてください。モバイルでは問題と解答を見られます。

ほかの言語では?言語別の解答を見る · 8 言語の解答

一つおきに足す書き方は言語ごとに違います。
Python は sum(a[0::2]) と sum(a[1::2]) のように、切り出したリストをそのまま足します。
JS・TS は a.filter((x, i) => i % 2 === 0).reduce((s, x) => s + x, 0)、C# は a.Where((x, i) => i % 2 == 0).Sum()、Java は IntStream.range(0, n).filter(i -> i % 2 == 0).map(i -> a[i]).sum() で選んでから足します。
C は sum[i % 2] += x、C++ は i += 2 で飛ばすループ、Craykon は i % 2 == 0 かどうかを見て二つの変数に分けて足します。
落とし穴その一:JS の reduce で初期値 0 を書き忘れると、空の配列で止まります。
例 2 ではミンソの点数が一つもないので、TypeError(Reduce of empty array with no initial value)になります。
Python の sum、C# の Sum()、Java の sum() は空のリストで 0 を返します。
落とし穴その二:JS で入力を Number で数に直さずに足すと、文字列がつながります。
例 1 が 18 7 ではなく 03510 070 になります。
Craykon も数と文字列を + で足すとつなげるので、行をまるごと読んだときは 数に() で直すか、コンソール.数読み() で読みます。
落とし穴その三:リストの番号は 0 から数えるので、ジウの番は偶数番です。
番を 1 から数えて偶数番目をジウにすると二つの合計が入れ替わり、例 1 が 7 18 になります。

Pythonmain.py · 4 行
n = int(input())a = list(map(int, input().split()))# a[0::2]는 0, 2, 4…번, a[1::2]는 1, 3, 5…번. 빈 목록의 sum은 0이다print(sum(a[0::2]), sum(a[1::2]))
JavaScriptmain.js · 5 行
const [n, ...a] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);// reduce에 시작값 0을 줘야 빈 배열에서도 0이 나온다const jiu = a.filter((x, i) => i % 2 === 0).reduce((s, x) => s + x, 0);const minseo = a.filter((x, i) => i % 2 === 1).reduce((s, x) => s + x, 0);console.log(`${jiu} ${minseo}`);
TypeScriptmain.ts · 6 行
import { readFileSync } from "node:fs";const [n, ...a]: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);// reduce에 시작값 0을 줘야 빈 배열에서도 0이 나온다const jiu: number = a.filter((x, i) => i % 2 === 0).reduce((s, x) => s + x, 0);const minseo: number = a.filter((x, i) => i % 2 === 1).reduce((s, x) => s + x, 0);console.log(`${jiu} ${minseo}`);
JavaMain.java · 15 行
import java.util.Scanner;import java.util.stream.IntStream; public class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int n = sc.nextInt();        int[] a = new int[n];        for (int i = 0; i < n; i++) a[i] = sc.nextInt();        // 번호의 흐름에서 짝수 번호만 골라 그 칸의 값을 더한다. 빈 흐름의 sum()은 0이다        int jiu = IntStream.range(0, n).filter(i -> i % 2 == 0).map(i -> a[i]).sum();        int minseo = IntStream.range(0, n).filter(i -> i % 2 == 1).map(i -> a[i]).sum();        System.out.println(jiu + " " + minseo);    }}
C#Main.cs · 15 行
using System;using System.Linq; class Program{    static void Main()    {        int n = int.Parse(Console.ReadLine());        int[] a = Array.ConvertAll(Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries), int.Parse);        // Where는 (값, 번호)를 함께 받을 수 있다. 빈 목록의 Sum()은 0이다        int jiu = a.Where((x, i) => i % 2 == 0).Sum();        int minseo = a.Where((x, i) => i % 2 == 1).Sum();        Console.WriteLine($"{jiu} {minseo}");    }}
C++main.cpp · 14 行
#include <iostream>#include <vector> int main() {    int n;    std::cin >> n;    std::vector<int> a(n);    for (int& x : a) std::cin >> x;    int jiu = 0, minseo = 0;    // 두 칸씩 건너뛰며 더한다    for (int i = 0; i < n; i += 2) jiu += a[i];    for (int i = 1; i < n; i += 2) minseo += a[i];    std::cout << jiu << " " << minseo << "\n";}
Cmain.c · 14 行
#include <stdio.h> int main(void) {    int n;    scanf("%d", &n);    int sum[2] = {0, 0};   /* sum[0]은 지우, sum[1]은 민서 */    for (int i = 0; i < n; i++) {        int x;        scanf("%d", &x);        sum[i % 2] += x;   /* 0번째부터 세면 짝수 번째가 지우다 */    }    printf("%d %d\n", sum[0], sum[1]);    return 0;}
Craykonmain.cray · 17 行
n = コンソール.行読み().数に();a = コンソール.数読み();지우 = 0;민서 = 0;繰り返す (i = 0; i < n; i++){    // 0번부터 세면 짝수 번이 지우의 차례다    もし (i % 2 == 0)    {        지우 += a[i];    }    でなければ    {        민서 += a[i];    }}コンソール.書く(지우 + " " + 민서);