윷놀이에서 한 차례에는 윷가락을 적어도 한 번 던진다.
던진 결과가 윷이나 모이면 한 번 더 던지고, 도·개·걸이면 그 차례가 끝난다.
결과는 수로 적는다. 도는 1, 개는 2, 걸은 3, 윷은 4, 모는 5이고, 말은 이 수만큼 간다.
한 사람이 여러 차례에 걸쳐 던진 결과가 던진 차례대로 모두 주어진다.
첫 줄에 던진 횟수 n이, 둘째 줄에 결과 n개가 빈칸 하나씩 띄워 주어진다.
마지막 결과는 1, 2, 3 가운데 하나라서, 마지막 차례도 끝까지 주어진다.
차례마다 그 차례에 던진 결과를 모두 더한 값(그 차례에 말이 가는 칸 수)을 한 줄에 하나씩 차례대로 출력하라.
입력
1 ≤ n ≤ 1,000. 결과는 1 ~ 5의 정수이고, 마지막 결과는 1, 2, 3 가운데 하나다
출력
차례 수만큼의 줄, 줄마다 그 차례에 가는 칸 수
예시 1 · stdin
6
4 2 3 5 4 1
stdout
6
3
10
main.py
오류 목록00F8 ↓ · ⇧F8 ↑
입력(stdin)
실행하면 이 줄들이 차례로 input()·표준 입력으로 들어가요(실행 중에 묻지 않아요).
$ 준비됐어요
코드를 입력해 풀려면 PC에서 열어 주세요. 모바일에서는 문제와 풀이를 볼 수 있어요.
다른 언어로는?언어별 풀이 보기 · 8개 언어 풀이
한 차례는 '먼저 던지고, 던진 뒤에 다시 던질지 묻는' 반복이라 do-while이 딱 맞아요: do { t = a[i++]; total += t; } while (t >= 4);. do-while이 있는 언어는 C·C++·Java·C#·JS·TS예요. C·C++·Java·C#은 while (…) 뒤에 세미콜론이 없으면 컴파일되지 않고, JS·TS는 빼도 자동으로 채워 주지만 보통 써 둬요. Python과 크레이콘에는 do-while이 없어서 while True:(크레이콘 동안 (참))로 들어가 몸통 맨 끝에서 if t < 4: break(크레이콘 그만;)로 '적어도 한 번'을 만들어요. 이때 묻는 줄을 더하는 줄보다 앞에 두면 차례를 끝낸 도·개·걸이 빠져서 4 2가 6이 아니라 4가 돼요. 보통 while로 쓰려면 첫 번을 반복 밖에서 던져야 하는데, 그 첫 결과를 더하는 것을 잊기 쉬워요. 경계도 조심해요. 윷(4)도 다시 던지니 t >= 4(또는 t > 3)이고, t > 4나 t == 5라고 쓰면 윷에서 차례가 끝나요.
Pythonmain.py · 13 줄
n = int(input())throws = list(map(int, input().split()))i = 0while i < n: total = 0 # 파이썬에는 do-while이 없다: while True로 들어가 끝에서 물어 "적어도 한 번" 던진다 while True: t = throws[i] i += 1 total += t if t < 4: # 도·개·걸이면 차례가 끝난다(더한 뒤에 묻는다) break print(total)
JavaScriptmain.js · 14 줄
const [n, ...throws] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const out = [];let i = 0;while (i < n) { let total = 0; let t; // 한 번은 던지고, 윷(4)·모(5)가 나왔으면 다시 던진다 do { t = throws[i++]; total += t; } while (t >= 4); out.push(total);}console.log(out.join("\n"));
TypeScriptmain.ts · 14 줄
import { readFileSync } from "node:fs";const [n, ...throws]: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const out: number[] = [];let i = 0;while (i < n) { let total = 0; let t: number; do { t = throws[i++]; total += t; } while (t >= 4); out.push(total);}console.log(out.join("\n"));
JavaMain.java · 22 줄
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] throwsList = new int[n]; for (int k = 0; k < n; k++) throwsList[k] = sc.nextInt(); StringBuilder out = new StringBuilder(); int i = 0; while (i < n) { int total = 0; int t; do { t = throwsList[i++]; total += t; } while (t >= 4); // do-while은 세미콜론으로 끝난다 out.append(total).append('\n'); } System.out.print(out); }}
C#Main.cs · 26 줄
using System;using System.Linq;using System.Text;class Program{ static void Main() { int n = int.Parse(Console.ReadLine().Trim()); int[] throws = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray(); var sb = new StringBuilder(); int i = 0; while (i < n) { int total = 0; int t; do { t = throws[i++]; total += t; } while (t >= 4); sb.Append(total).Append('\n'); } Console.Write(sb); }}
C++main.cpp · 18 줄
#include <iostream>#include <vector>int main() { int n; std::cin >> n; std::vector<int> a(n); for (auto &x : a) std::cin >> x; int i = 0; while (i < n) { int total = 0, t; do { t = a[i++]; total += t; } while (t >= 4); std::cout << total << "\n"; }}
Cmain.c · 17 줄
#include <stdio.h>int main(void) { int n, a[1000]; scanf("%d", &n); for (int k = 0; k < n; k++) scanf("%d", &a[k]); int i = 0; while (i < n) { int total = 0, t; do { t = a[i++]; total += t; } while (t >= 4); /* 윷(4)·모(5)면 한 번 더 */ printf("%d\n", total); } return 0;}
Craykonmain.cray · 19 줄
n = 콘솔.줄읽기().수로변환();던짐 = 콘솔.수들읽기();i = 0;동안 (i < n){ 합 = 0; // 크레이콘에는 do-while이 없다: 동안 (참)으로 들어가 끝에서 물어 그만 동안 (참) { t = 던짐[i]; i++; 합 = 합 + t; 만약 (t < 4) { 그만; } } 콘솔.쓰기(합);}