한 줄에 정수가 하나씩 주어지고, 0이 나오면 입력이 끝났다는 표시다. 0 앞의 수를 차례로 더해 가며, 수를 하나 더할 때마다 그때까지의 합을 한 줄에 출력하라. 0 자체는 더하지 않고 출력도 하지 않는다. 0 뒤에 줄이 더 있을 수 있는데, 모두 무시한다. 0 앞에는 수가 적어도 하나 있다. 중간 합이 0이 되어도 끝이 아니다.
입력
0 앞의 수는 1개 이상 10,000개 이하, 각 수는 -1,000,000,000 이상 1,000,000,000 이하이고 0이 아니다. 0 뒤의 줄 수는 정해지지 않았다.
출력
0 앞의 수 개수만큼의 줄, 각 줄에 그때까지의 합
예시 1 · stdin
3
-5
10
0
stdout
3
-2
8
예시 2 · stdin
4
-4
7
0
100
0
stdout
4
0
7
main.py
오류 목록00F8 ↓ · ⇧F8 ↑
입력(stdin)
실행하면 이 줄들이 차례로 input()·표준 입력으로 들어가요(실행 중에 묻지 않아요).
$ 준비됐어요
코드를 입력해 풀려면 PC에서 열어 주세요. 모바일에서는 문제와 풀이를 볼 수 있어요.
다른 언어로는?언어별 풀이 보기 · 8개 언어 풀이
끝 표시(센티널)까지 읽는 반복은 '읽고 → 0인지 묻고 → 처리' 순서예요. 읽기와 검사를 한 줄로: Python while (x := int(input())) != 0:(3.8의 바다코끼리 연산자), C while (scanf("%lld", &x) == 1 && x != 0), C++ while (std::cin >> x && x != 0), Java·C# while ((x = …parse(readLine())) != 0). JS·TS는 입력을 한꺼번에 읽으니 for … of에서 0을 만나면 break. 크레이콘은 대입을 식 안에 쓸 수 없어서 반복 앞에서 한 번 읽고, 반복 끝에서 다음 줄을 다시 읽어요(x = 콘솔.줄읽기().수로변환();). 함정 셋: ① 입력 끝(EOF)까지 읽으면 0 뒤의 줄까지 더해져요(두 번째 예시). ② 처리한 다음에 0을 물으면 0일 때의 합이 한 줄 더 찍혀요. ③ 합이 최대 10^9 × 10^4 = 10^13이라 C·C++·Java·C#은 long(long long)이어야 해요. Python 정수는 넘치지 않고, JS·TS·크레이콘의 실수는 2^53(약 9×10^15)까지 정확해서 괜찮아요.
Pythonmain.py · 5 줄
total = 0# 0이 끝 표시다. 0 뒤에 줄이 더 있어도 읽지 않는다while (x := int(input())) != 0: total += x print(total)
JavaScriptmain.js · 9 줄
const nums = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const out = [];let total = 0;for (const x of nums) { if (x === 0) break; // 끝 표시. 뒤에 남은 수는 무시 total += x; out.push(total);}console.log(out.join("\n"));
TypeScriptmain.ts · 10 줄
import { readFileSync } from "node:fs";const nums: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const out: number[] = [];let total = 0;for (const x of nums) { if (x === 0) break; // 끝 표시. 뒤에 남은 수는 무시 total += x; out.push(total);}console.log(out.join("\n"));
JavaMain.java · 17 줄
import java.io.BufferedReader;import java.io.InputStreamReader;public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder out = new StringBuilder(); long total = 0; // 10^9 × 10^4 = 10^13 이라 int로는 넘친다 long x; // 0이 끝 표시다. 0 뒤의 줄은 읽지 않는다 while ((x = Long.parseLong(br.readLine().trim())) != 0) { total += x; out.append(total).append('\n'); } System.out.print(out); }}
C#Main.cs · 19 줄
using System;using System.Text;class Program{ static void Main() { var out_ = new StringBuilder(); long total = 0; // 10^9 × 10^4 = 10^13 이라 int로는 넘친다 long x; // 0이 끝 표시다. 0 뒤의 줄은 읽지 않는다 while ((x = long.Parse(Console.ReadLine())) != 0) { total += x; out_.Append(total).Append('\n'); } Console.Write(out_); }}
C++main.cpp · 12 줄
#include <iostream>int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); long long x, total = 0; // 10^9 × 10^4 = 10^13 이라 int로는 넘친다 // 0이 끝 표시다. 0 뒤의 줄은 읽지 않는다 while (std::cin >> x && x != 0) { total += x; std::cout << total << '\n'; }}
Cmain.c · 11 줄
#include <stdio.h>int main(void) { long long x, total = 0; /* 10^9 × 10^4 = 10^13 이라 int로는 넘친다 */ /* 0이 끝 표시다. 0 뒤의 줄은 읽지 않는다 */ while (scanf("%lld", &x) == 1 && x != 0) { total += x; printf("%lld\n", total); } return 0;}
Craykonmain.cray · 9 줄
합 = 0;x = 콘솔.줄읽기().수로변환();// 0이 끝 표시다. 0 뒤의 줄은 읽지 않는다동안 (x != 0){ 합 += x; 콘솔.쓰기(합); x = 콘솔.줄읽기().수로변환();}