2023. 4. 3. 21:00ㆍIT/Algorithm
1. 문제 이해하기
n개의 점수가 주어진다.
이 중 최고점을 m이라 했을 때, 각각의 점수들을 "점수/M*100"으로 환산해 평균을 구하라.
예를 들어 2개의 숫자 10, 20이 주어진다면,
{(10/20*100) + (20/20*100)} / 2 = 75,
따라서 75가 정답이다.
2. 아이디어 구상
구해야하는 값을 정리해보면 다음과 같다.
따라서 주어지는 전체 점수에 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
-문제해결흐름을 간단히 정리한 주관적 포스팅-
-부족한 설명이 있다면 부디 조언 부탁드립니다-
이 포스팅은 쿠팡 파트너스 활동의 일환으로,
이에 따른 일정액의 수수료를 제공받습니다
'IT > Algorithm' 카테고리의 다른 글
Leetcode 9. Palindrome Number - Dart, Python (45) | 2023.05.11 |
---|---|
Leetcode 1. Two Sum - Dart, Python (84) | 2023.02.27 |
백준 1157. 단어 공부 - Golang, Python (8) | 2023.02.06 |
백준 1152. 단어의 개수 - Golang, Python (2) | 2023.01.30 |
Leetcode 5. Longest Palindromic Substring - Python (cf. 백준 13275) (2) | 2022.12.15 |