코딩 테스트/Level 1
2. 평균 구하기
컴닥
2019. 10. 2. 20:05
반응형
https://programmers.co.kr/learn/courses/30/lessons/12944
코딩테스트 연습 - 평균 구하기
정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요. 제한사항 arr은 길이 1 이상, 100 이하인 배열입니다. arr의 원소는 -10,000 이상 10,000 이하인 정수입니다. 입출력 예 arr
programmers.co.kr
파이썬
for를 이용한 가장 흔한 풀이입니다.
def solution(arr):
total, count = 0, 0
for i in arr:
total += i
count += 1
return total / count
테스트 1 〉 통과 (0.04ms, 10.8MB)
테스트 2 〉 통과 (0.04ms, 10.7MB)
테스트 3 〉 통과 (0.04ms, 10.6MB)
테스트 4 〉 통과 (0.07ms, 10.7MB)
테스트 5 〉 통과 (0.04ms, 10.7MB)
테스트 6 〉 통과 (0.04ms, 10.7MB)
테스트 7 〉 통과 (0.04ms, 10.6MB)
테스트 8 〉 통과 (0.04ms, 10.7MB)
테스트 9 〉 통과 (0.04ms, 10.7MB)
테스트 10 〉 통과 (0.04ms, 10.7MB)
테스트 11 〉 통과 (0.04ms, 10.8MB)
테스트 12 〉 통과 (0.04ms, 10.8MB)
테스트 13 〉 통과 (0.04ms, 10.8MB)
테스트 14 〉 통과 (0.04ms, 10.7MB)
테스트 15 〉 통과 (0.04ms, 10.7MB)
테스트 16 〉 통과 (0.04ms, 10.7MB)
파이썬의 변수 스코프를 사용한 코드입니다.
for문 외(리턴)에서 i 변수를 보니 이상합니다. 좋은 코드는 아닌 것 같습니다.
def solution(arr):
total = 0
for i in range(len(arr)):
total += arr[i]
return total / (i + 1)
enumerate를 써보면 나름 깔끔해집니다.
def solution(arr):
total = 0
for index, value in enumerate(arr):
total += value
return total / (index + 1)
내장 함수를 이용하면 더 짧고 가독성 좋고 빠른 코드를 만들 수 있습니다.
def solution(arr):
return sum(arr)/len(arr)
테스트 1 〉 통과 (0.04ms, 10.7MB)
테스트 2 〉 통과 (0.04ms, 10.7MB)
테스트 3 〉 통과 (0.04ms, 10.7MB)
테스트 4 〉 통과 (0.04ms, 10.8MB)
테스트 5 〉 통과 (0.03ms, 10.7MB)
테스트 6 〉 통과 (0.05ms, 10.8MB)
테스트 7 〉 통과 (0.03ms, 10.7MB)
테스트 8 〉 통과 (0.04ms, 10.7MB)
테스트 9 〉 통과 (0.04ms, 10.6MB)
테스트 10 〉 통과 (0.03ms, 10.7MB)
테스트 11 〉 통과 (0.04ms, 10.7MB)
테스트 12 〉 통과 (0.04ms, 10.7MB)
테스트 13 〉 통과 (0.04ms, 10.7MB)
테스트 14 〉 통과 (0.04ms, 10.8MB)
테스트 15 〉 통과 (0.03ms, 10.7MB)
테스트 16 〉 통과 (0.04ms, 10.6MB)
자바스크립트
함수형으로 풀어보았습니다.
function solution(arr) {
return arr.reduce((prev, curr)=>prev+curr)/arr.length;
}
자바
class Solution {
public double solution(int[] arr) {
double answer = 0;
for(int each:arr){
answer += each;
}
return answer / arr.length;
}
}
import java.util.Arrays;
class Solution {
public double solution(int[] arr) {
return Arrays.stream(arr).reduce(0, (a, b) -> a + b) / (double) arr.length;
}
}
고
i 변수를 for 문 밖으로 빼낼 수도 있습니다.
흔한 형태가 아니라 가독성이 좋지 않습니다.
func solution(arr []int) float64 {
var sum, i int
for ; i < len(arr); i++ {
sum += arr[i]
}
return float64(sum) / float64(i)
}
for range로 작성해 봅니다.
깔끔(?)하네요.
func solution(arr []int) float64 {
var count, num, sum int
for count, num = range arr {
sum += num
}
return float64(sum) / float64(count+1)
}
일반적으로...
func solution(arr []int) float64 {
sum := 0
for _, v := range arr {
sum += v
}
return float64(sum) / float64(len(arr))
}
코틀린
class Solution {
fun solution(arr: IntArray): Double {
var sum = 0
for (num in arr){
sum += num
}
return sum / arr.size.toDouble()
}
}
함수형
class Solution {
fun solution(arr: IntArray) = arr.asSequence().reduce { a, b -> a + b } / arr.size.toDouble()
}
내장함수
class Solution {
fun solution(arr: IntArray) = arr.average()
}
C#
public class Solution
{
public double solution(int[] arr)
{
double sum = 0;
foreach (int num in arr)
{
sum += num;
}
return sum / arr.Length;
}
}
using System.Linq;
public class Solution
{
public double solution(int[] arr)
{
return arr.Average();
}
}
using System.Linq;
public class Solution
{
public double solution(int[] arr) => arr.Average();
}
DART
double solution(arr) {
int sum = 0;
for (int each in arr) {
sum += each;
}
return sum / arr.length;
}
SWIFT
func solution(_ arr:[Int]) -> Double {
return Double(arr.reduce(0){$0 + $1}) / Double(arr.count)
}
RUST
fn solution(nums: Vec<i32>) -> f64 {
let mut s = 0;
for num in &nums {
s = s + num;
}
s as f64 / nums.len() as f64
}
fn main() {
assert_eq!(solution(vec![1, 2, 3, 4, 5]), 3.0);
println!("{}", solution(vec![1, 2, 3, 4, 5]));
}
fn solution(nums: Vec<i32>) -> f64 {
let s: i32 = nums.iter().sum();
s as f64 / nums.len() as f64
}
fn solution(nums: Vec<i32>) -> f64 {
nums.iter().sum::<i32>() as f64 / nums.len() as f64
}
반응형