{ }codelper
세기평균P0343

평균 이상이었던 아침

n일 동안 매일 아침 기온을 쟀다. 첫 줄에 n이 주어진다. 둘째 줄에 아침 기온 n개가 잰 순서대로 빈칸 하나로 띄워 주어진다. 평균은 기온을 모두 더해 n으로 나눈 값이며, 소수점 아래를 버리거나 반올림하지 않고 그대로 쓴다. 아침 기온이 평균 이상인 날의 수를 출력하라. 기온이 평균과 딱 같은 날도 센다.

입력
1 ≤ n ≤ 1,000, -50 ≤ 기온 ≤ 50(정수)
출력
기온이 평균 이상인 날의 수를 한 줄에
예시 1 · stdin
4
1 2 2 5
stdout
1
예시 2 · stdin
3
7 7 7
stdout
3
main.py
입력(stdin)

실행하면 이 줄들이 차례로 input()·표준 입력으로 들어가요(실행 중에 묻지 않아요).

$ 준비됐어요

코드를 입력해 풀려면 PC에서 열어 주세요. 모바일에서는 문제와 풀이를 볼 수 있어요.

다른 언어로는?언어별 풀이 보기 · 8개 언어 풀이

조건에 맞는 것을 세는 방법이 언어마다 달라요.
Python은 sum(x * n >= total for x in a)처럼 참을 1로 쳐서 더해요.
JS·TS는 a.filter(x => x >= avg).length, C#은 a.Count(x => x * n >= total), Java는 Arrays.stream(a).filter(x -> x * n >= total).count(), C++은 std::count_if를 써요.
C는 비교의 결과가 1 또는 0이라 count += (a[i] * n >= total)로 더할 수 있어요.
Java와 C#은 count += (x >= avg)가 컴파일되지 않고, 크레이콘도 참/거짓을 수에 더하면 오류로 멈추므로 만약으로 세요.
함정 하나: 평균을 구하는 나눗셈이에요.
C·C++·Java·C#에서 정수끼리 total / n으로 나누면 소수점 아래가 버려져요.
예시 1의 평균은 2.5인데 2가 되어, 2도인 이틀까지 세어 3이 나와요.
Python의 //도 2가 되어 똑같이 3이 나와요.
Python·JS·TS·크레이콘의 /는 실수 나눗셈이라 2.5가 그대로 나와요.
정수만 쓰려면 x ≥ total ÷ n의 양쪽에 n을 곱해 x * n >= total로 견줘요.
평균이 음수이면 두 나눗셈이 서로 달라져요.
기온이 -4 -3 -2 -1이면 평균은 -2.5이고 답은 2예요.
C의 /는 0 쪽으로 버려 -2가 되므로 우연히 2가 나오지만, Python의 //는 아래로 내려 -3이 되므로 3이 나와요.
함정 둘: '이상'은 >=예요.
>로 쓰면 평균과 딱 같은 날이 빠져서 예시 2가 3이 아니라 0이 돼요.

Pythonmain.py · 6 줄
n = int(input())a = list(map(int, input().split()))total = sum(a)# x >= total / n 의 양쪽에 n을 곱하면 나눗셈 없이 정수끼리 견줄 수 있다# 참은 1, 거짓은 0으로 더해지므로 sum이 곧 개수다print(sum(x * n >= total for x in a))
JavaScriptmain.js · 5 줄
const [n, ...a] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const total = a.reduce((s, x) => s + x, 0);// JS의 /는 늘 실수 나눗셈이라 평균이 2.5처럼 그대로 나온다const avg = total / n;console.log(a.filter((x) => x >= avg).length);
TypeScriptmain.ts · 6 줄
import { readFileSync } from "node:fs";const [n, ...a]: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const total: number = a.reduce((s, x) => s + x, 0);// TS의 /는 늘 실수 나눗셈이라 평균이 2.5처럼 그대로 나온다const avg: number = total / n;console.log(a.filter((x) => x >= avg).length);
JavaMain.java · 15 줄
import java.util.Arrays;import java.util.Scanner; 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();        int total = Arrays.stream(a).sum();        // int끼리 나누면 소수점 아래가 버려지므로 양쪽에 n을 곱해 견준다        long count = Arrays.stream(a).filter(x -> x * n >= total).count();        System.out.println(count);    }}
C#Main.cs · 14 줄
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);        int total = a.Sum();        // int끼리 나누면 소수점 아래가 버려지므로 양쪽에 n을 곱해 견준다        Console.WriteLine(a.Count(x => x * n >= total));    }}
C++main.cpp · 14 줄
#include <algorithm>#include <iostream>#include <numeric>#include <vector> int main() {    int n;    std::cin >> n;    std::vector<int> a(n);    for (int& x : a) std::cin >> x;    int total = std::accumulate(a.begin(), a.end(), 0);    // int끼리 나누면 소수점 아래가 버려지므로 양쪽에 n을 곱해 견준다    std::cout << std::count_if(a.begin(), a.end(), [&](int x) { return x * n >= total; }) << "\n";}
Cmain.c · 18 줄
#include <stdio.h> int main(void) {    int n, a[1000], total = 0;    scanf("%d", &n);    for (int i = 0; i < n; i++) {        scanf("%d", &a[i]);        total += a[i];    }    int count = 0;    for (int i = 0; i < n; i++) {        /* total / n은 소수점 아래를 버리므로 양쪽에 n을 곱해 견준다.           C에서 비교의 결과는 int 1 또는 0이라 그대로 더할 수 있다 */        count += (a[i] * n >= total);    }    printf("%d\n", count);    return 0;}
Craykonmain.cray · 19 줄
n = 콘솔.줄읽기().수로변환();a = 콘솔.수들읽기();합 = 0;각각 (x 에서 a){    합 += x;}// 크레이콘의 /는 실수 나눗셈이라 평균이 2.5처럼 그대로 나온다평균 = 합 / n;개수 = 0;각각 (x 에서 a){    // 참/거짓은 수에 더할 수 없으므로 만약으로 센다    만약 (x >= 평균)    {        개수 += 1;    }}콘솔.쓰기(개수);