지우와 민서가 다트를 한 번씩 번갈아 던진다.
지우가 먼저 던지고, 그다음에 민서가 던지고, 다시 지우가 던지는 순서가 끝까지 이어진다.
첫 줄에 두 사람이 던진 횟수를 모두 합친 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
오류 목록00F8 ↓ · ⇧F8 ↑
입력(stdin)
실행하면 이 줄들이 차례로 input()·표준 입력으로 들어가요(실행 중에 묻지 않아요).
$ 준비됐어요
코드를 입력해 풀려면 PC에서 열어 주세요. 모바일에서는 문제와 풀이를 볼 수 있어요.
다른 언어로는?언어별 풀이 보기 · 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로 건너뛰는 반복, 크레이콘은 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으로 나와요. 크레이콘도 수와 문자열을 +로 더하면 이어 붙이므로, 줄을 통째로 읽었을 때는 수로변환()으로 바꾸거나 콘솔.수들읽기()로 읽어요. 함정 셋: 목록의 번호는 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]; }}콘솔.쓰기(지우 + " " + 민서);