백준 1546. 평균 - Golang, Python

2023. 4. 3. 21:00IT/Algorithm

반응형

백준 1546 문제 보기

 

1. 문제 이해하기

n개의 점수가 주어진다.

이 중 최고점을 m이라 했을 때, 각각의 점수들을 "점수/M*100"으로 환산해 평균을 구하라.

 

예를 들어 2개의 숫자 10, 20이 주어진다면,

{(10/20*100) + (20/20*100)} / 2 = 75,

따라서 75가 정답이다.

 

2. 아이디어 구상

구해야하는 값을 정리해보면 다음과 같다.

 

By Mesotes

따라서 주어지는 전체 점수에 100을 곱한 후, 이를 전체 점수들의 개수와 최대값으로 나눠주면 된다.

 

Python으로 풀 경우 주어지는 점수들을 리스트에 담아, 편리한 내장함수들을 이용해 간단히 문제를 해결할 수 있다.

<Python 풀이>

n = int(input())
nums = list(map(int, input().split()))

print((sum(nums) * 100) / (n * max(nums)))

 

그러나 Golang으로 풀 경우에는 코드가 좀 더 길어진다.

Golang에는 array에 관한 sum, max 등의 함수가 존재하지 않는다.

때문에 input을 받으면서 동시에 sum과 max작업을 진행해주자.

 

3. 풀이

몇 개의 점수가 있는지 담을 n과 가장 큰 점수를 담을 maxVal, 전체 합을 담을 sumVal을 정의한다.

var n, maxVal, sumVal int

 

bufio.NewReader를 통해 값을 읽고, 첫째 줄에 등장하는 개수 n을 스캔하여 변수에 담는다.

reader := bufio.NewReader(os.Stdin)
fmt.Fscanln(reader, &n)

 

점수들을 담을 scores array를 선언하고 점수를 하나하나 받으며 sum 작업과 max 작업도 진행하자.

이때 max작업, 즉, 최대값을 구하는 작업의 경우, Python, Java 등 다른 언어에서는 삼항연산자를 쓰는 것이 깔끔하고 보기 편하다.

그러나 Golang은 삼항연산자가 존재하지 않는다.

var scores = make([]int, n)
for i := 0; i < n; i++ {
	fmt.Fscanf(reader, "%d ", &scores[i])
	sumVal += scores[i]
	if maxVal < scores[i] {
		maxVal = scores[i]
	}
}

 

마지막으로 정답을 계산한다.

fmt.Println((float64(sumVal) * 100) / (float64(n) * float64(maxVal)))

 

전체 코드는 다음과 같다.

<Golang 풀이>

package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	var n, maxVal, sumVal int
	reader := bufio.NewReader(os.Stdin)
	fmt.Fscanln(reader, &n)

	var scores = make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Fscanf(reader, "%d ", &scores[i])
		sumVal += scores[i]
		if maxVal < scores[i] {
			maxVal = scores[i]
		}
	}

	fmt.Println((float64(sumVal) * 100) / (float64(n) * float64(maxVal)))
}

 

Golang은 매우 (어떤 때는 지나칠 정도로) 단순한 언어다.

array 내 원소들을 합하거나, 최댓값을 찾는 built-in function이 없으며, 삼항연산자도 없다.

재미있는 언어다.


백준 1546. 평균 (브론즈 1)

https://www.acmicpc.net/problem/1546

 

 

 

 

-문제해결흐름을 간단히 정리한 주관적 포스팅-

 

-부족한 설명이 있다면 부디 조언 부탁드립니다-

 

 

 

 

이 포스팅은 쿠팡 파트너스 활동의 일환으로,

이에 따른 일정액의 수수료를 제공받습니다

반응형