자전거 기록계가 n개 구간마다 달린 거리(미터)와 걸린 시간(초)을 정수로 남겼다.
첫 줄에 n, 둘째 줄에 구간 거리 n개, 셋째 줄에 구간 시간 n개가 빈칸으로 나뉘어 주어진다.
구간마다 한 줄에 속력과 페이스를 빈칸 하나로 띄워 출력하라.
속력은 시속 킬로미터(거리 ÷ 시간 × 3.6)이고, 소수 둘째 자리까지 반올림해 정확히 두 자리로 쓴다(18은 18.00).
페이스는 1km를 가는 데 걸리는 초(시간 × 1000 ÷ 거리)에서 소수 부분을 버린 정수 p를 "분:초" 꼴로 쓴 것이다.
분은 p를 60으로 나눈 몫이고 앞에 0을 붙이지 않으며(3분은 3, 0분은 0), 60 이상이어도 시간으로 바꾸지 않는다.
초는 p를 60으로 나눈 나머지이고 늘 두 자리로 쓴다(5초는 05).
마지막 줄에는 "TOTAL", 전체 속력, 전체 페이스를 빈칸 하나씩으로 띄워 출력하라.
전체 속력과 전체 페이스는 구간 값의 평균이 아니라, 거리를 모두 더한 값과 시간을 모두 더한 값으로 위와 같이 구한다.
반올림이 헷갈리지 않도록, 출력할 모든 속력(전체 속력 포함)은 100을 곱했을 때 소수 부분이 0.4 이하이거나 0.6 이상이 되게 주어진다.
입력
1 ≤ n ≤ 5000, 1 ≤ 거리 ≤ 100000, 1 ≤ 시간 ≤ 36000. 모두 정수
출력
n + 1줄. 구간마다 "속력 분:초", 마지막 줄 "TOTAL 속력 분:초"
예시 1 · stdin
3
1000 5000 2500
200 600 487
stdout
18.00 3:20
30.00 2:00
18.48 3:14
TOTAL 23.78 2:31
main.py
오류 목록00F8 ↓ · ⇧F8 ↑
입력(stdin)
실행하면 이 줄들이 차례로 input()·표준 입력으로 들어가요(실행 중에 묻지 않아요).
$ 준비됐어요
코드를 입력해 풀려면 PC에서 열어 주세요. 모바일에서는 문제와 풀이를 볼 수 있어요.
다른 언어로는?언어별 풀이 보기 · 8개 언어 풀이
수를 바꾸는 때가 핵심이에요. C·C++·Java·C#에서 int끼리 /는 몫만 남기므로, 속력은 나누기 전에 한쪽을 실수로 바꿔요: (double) m / s * 3.6. (double) (m / s)처럼 괄호로 감싸면 이미 정수로 나눈 뒤라 예시 셋째 구간의 2500 ÷ 487이 5가 되어 18.48 대신 18.00이 나와요. Python 3·JS·TS·크레이콘의 /는 늘 실수 나눗셈이라 이 함정은 없지만, 거꾸로 페이스의 버림을 따로 해야 해요: Python //, JS·TS Math.floor, 크레이콘 수학.내림(그리고 분은 수학.몫(p, 60)). 크레이콘에서 내림 없이 p % 60을 하면 20.5초 같은 값이 나와요. 버림을 반올림(round)으로 하면 61.66초가 1:02가 돼요. 전체 페이스는 전체 시간 × 1000이라 5000구간 × 36000초면 1800억으로 int(약 21억)를 넘어요: C·C++ long long, Java·C# long으로 모아요. JS·TS·크레이콘의 수는 2^53까지 정확해서 괜찮아요. 수 여러 개를 읽을 때 Python map(int, input().split()), JS·TS 한꺼번에 읽어 split(/\s+/), Java StringTokenizer, C# Split + int.Parse, C scanf("%d"), C++ cin >>, 크레이콘 콘솔.수들읽기()를 써요. 소수 두 자리는 Python f"{x:.2f}", JS·TS toFixed(2), C·C++ printf("%.2f"), Java String.format(Locale.ROOT, "%.2f", x), C# ToString("F2", CultureInfo.InvariantCulture), 크레이콘 글자.소수자리맞추기(x, 2)예요. 초를 두 자리로 채우는 것도 잊지 마세요: %02d, padStart(2, "0"), D2, 크레이콘 앞채우기(2, "0"). 그리고 전체 속력은 구간 속력의 평균이 아니에요: 예시에서 평균은 22.16이지만 전체 거리 ÷ 전체 시간은 23.78이에요.
Pythonmain.py · 17 줄
def pace(seconds, meters): # 1km에 걸리는 초 = seconds × 1000 ÷ meters, 소수 부분은 버린다(정수 나눗셈 //) p = seconds * 1000 // meters return f"{p // 60}:{p % 60:02d}"def speed(meters, seconds): return f"{meters / seconds * 3.6:.2f}" # 파이썬 3의 / 는 늘 실수 나눗셈n = int(input())ds = list(map(int, input().split()))ts = list(map(int, input().split()))for d, t in zip(ds, ts): print(speed(d, t), pace(t, d))total_d, total_t = sum(ds), sum(ts)print("TOTAL", speed(total_d, total_t), pace(total_t, total_d))
JavaScriptmain.js · 20 줄
const [n, ...rest] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const ds = rest.slice(0, n);const ts = rest.slice(n, 2 * n);const speed = (m, s) => ((m / s) * 3.6).toFixed(2);const pace = (s, m) => { const p = Math.floor((s * 1000) / m); // JS의 / 는 실수 나눗셈이라 버림을 따로 한다 return `${Math.floor(p / 60)}:${String(p % 60).padStart(2, "0")}`;};const out = [];let totalD = 0;let totalT = 0;for (let i = 0; i < n; i++) { out.push(`${speed(ds[i], ts[i])} ${pace(ts[i], ds[i])}`); totalD += ds[i]; totalT += ts[i];}out.push(`TOTAL ${speed(totalD, totalT)} ${pace(totalT, totalD)}`);console.log(out.join("\n"));
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Locale;import java.util.StringTokenizer;public class Main { static int[] readInts(BufferedReader in, int n) throws IOException { StringTokenizer st = new StringTokenizer(in.readLine()); int[] a = new int[n]; for (int i = 0; i < n; i++) a[i] = Integer.parseInt(st.nextToken()); return a; } // 나누기 전에 double로 바꾼다: (double) (m / s)는 이미 정수로 나눈 뒤라 늦다 static String speed(long m, long s) { return String.format(Locale.ROOT, "%.2f", (double) m / s * 3.6); } // long끼리 나누면 소수 부분이 버려진다. 전체 시간 × 1000은 int를 넘는다 static String pace(long s, long m) { long p = s * 1000 / m; return String.format("%d:%02d", p / 60, p % 60); } public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(in.readLine().trim()); int[] ds = readInts(in, n); int[] ts = readInts(in, n); StringBuilder out = new StringBuilder(); long totalD = 0, totalT = 0; for (int i = 0; i < n; i++) { out.append(speed(ds[i], ts[i])).append(' ').append(pace(ts[i], ds[i])).append('\n'); totalD += ds[i]; totalT += ts[i]; } out.append("TOTAL ").append(speed(totalD, totalT)).append(' ').append(pace(totalT, totalD)).append('\n'); System.out.print(out); }}
C#Main.cs · 34 줄
using System;using System.Globalization;using System.Linq;using System.Text;class Program{ // 나누기 전에 double로: (double)(m / s)는 정수로 나눈 뒤라 늦다 static string Speed(long m, long s) => ((double)m / s * 3.6).ToString("F2", CultureInfo.InvariantCulture); // long끼리 나누면 소수 부분이 버려진다. 전체 시간 × 1000은 int를 넘는다 static string Pace(long s, long m) { long p = s * 1000 / m; return $"{p / 60}:{p % 60:D2}"; } static void Main() { int n = int.Parse(Console.ReadLine()); int[] ds = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray(); int[] ts = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray(); var sb = new StringBuilder(); long totalD = 0, totalT = 0; for (int i = 0; i < n; i++) { sb.Append(Speed(ds[i], ts[i])).Append(' ').Append(Pace(ts[i], ds[i])).Append('\n'); totalD += ds[i]; totalT += ts[i]; } sb.Append("TOTAL ").Append(Speed(totalD, totalT)).Append(' ').Append(Pace(totalT, totalD)).Append('\n'); Console.Write(sb); }}
C++main.cpp · 36 줄
#include <cstdio>#include <iostream>#include <vector>// 나누기 전에 double로: static_cast<double>(m / s)는 정수로 나눈 뒤라 늦다void printSpeed(long long m, long long s) { std::printf("%.2f", static_cast<double>(m) / s * 3.6);}// long long끼리 나누면 소수 부분이 버려진다. 전체 시간 × 1000은 int를 넘는다void printPace(long long s, long long m) { long long p = s * 1000 / m; std::printf("%lld:%02lld", p / 60, p % 60);}int main() { int n; std::cin >> n; std::vector<int> ds(n), ts(n); for (int& d : ds) std::cin >> d; for (int& t : ts) std::cin >> t; long long totalD = 0, totalT = 0; for (int i = 0; i < n; i++) { printSpeed(ds[i], ts[i]); std::printf(" "); printPace(ts[i], ds[i]); std::printf("\n"); totalD += ds[i]; totalT += ts[i]; } std::printf("TOTAL "); printSpeed(totalD, totalT); std::printf(" "); printPace(totalT, totalD); std::printf("\n");}
Cmain.c · 36 줄
#include <stdio.h>static int ds[5000], ts[5000];/* 나누기 전에 double로: (double)(m / s)는 정수로 나눈 뒤라 늦다 */static void print_speed(long long m, long long s) { printf("%.2f", (double)m / s * 3.6);}/* long long끼리 나누면 소수 부분이 버려진다. 전체 시간 × 1000은 int를 넘는다 */static void print_pace(long long s, long long m) { long long p = s * 1000 / m; printf("%lld:%02lld", p / 60, p % 60);}int main(void) { int n; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &ds[i]); for (int i = 0; i < n; i++) scanf("%d", &ts[i]); long long total_d = 0, total_t = 0; for (int i = 0; i < n; i++) { print_speed(ds[i], ts[i]); putchar(' '); print_pace(ts[i], ds[i]); putchar('\n'); total_d += ds[i]; total_t += ts[i]; } printf("TOTAL "); print_speed(total_d, total_t); putchar(' '); print_pace(total_t, total_d); putchar('\n'); return 0;}