주간 챌린지: 평균 진행

발행: (2025년 12월 14일 오후 08:58 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

주간 챌린지 351

매주 Mohammad S. Anwar는 The Weekly Challenge를 내보내며, 우리 모두가 두 가지 주간 과제에 대한 해결책을 생각해 볼 수 있는 기회를 제공합니다. 제 해결책은 먼저 Python으로 작성한 뒤 Perl로 변환합니다. 모두가 코딩을 연습하기에 좋은 방법이죠.

챌린지, 내 솔루션

Task 1: 특수 평균

작업

정수 배열이 주어집니다. 최소값과 최대값을 제외한 평균을 반환하는 스크립트를 작성하세요.

내 솔루션 (Python)

def special_average(ints: list) -> float:
    min_value = min(ints)
    max_value = max(ints)
    short_list = [n for n in ints if n != min_value and n != max_value]

    if not short_list:
        return 0

    return sum(short_list) / len(short_list)

내 솔루션 (Perl)

sub main (@ints) {
    my $min_value = min(@ints);
    my $max_value = max(@ints);
    my @short_array = grep { $_ != $min_value && $_ != $max_value } @ints;

    if ($#short_array == -1) {
        say 0;
    }

    say sum(@short_array) / scalar(@short_array);
}

예시

$ ./ch-1.py 8000 5000 6000 2000 3000 7000
5250.0

$ ./ch-1.py 100000 80000 110000 90000
95000.0

$ ./ch-1.py 2500 2500 2500 2500
0

$ ./ch-1.py 2000
0

$ ./ch-1.py 1000 2000 3000 4000 5000 6000
3500.0

Task 2: 등차수열

작업

숫자 배열이 주어집니다. 주어진 배열을 재배열하여 등차수열을 만들 수 있으면 true를, 그렇지 않으면 false를 반환하는 스크립트를 작성하세요.

두 연속된 원소 사이의 차이가 모두 동일하면 그 수열을 등차수열이라고 합니다.

내 솔루션 (Python)

부동소수점 정밀도는 까다로울 수 있습니다(예: 0.1 + 0.2 != 0.3). 신뢰할 수 있는 결과를 위해 입력은 정수이거나 Decimal 값이어야 합니다.

def arithmetic_progression(ints: list) -> bool:
    sorted_ints = sorted(ints)
    diff = sorted_ints[1] - sorted_ints[0]

    for i in range(2, len(sorted_ints)):
        if sorted_ints[i] - sorted_ints[i - 1] != diff:
            return False

    return True

내 솔루션 (Perl)

Perl도 동일한 부동소수점 문제를 겪습니다; Math::BigFloat를 사용하면 더 높은 정밀도를 얻을 수 있습니다.

sub main (@ints) {
    my @sorted_ints = map { Math::BigFloat->new($_) } sort { $a  $b } @ints;
    my $diff        = $sorted_ints[1] - $sorted_ints[0];

    foreach my $i ( 2 .. $#sorted_ints ) {
        if ( $sorted_ints[$i] - $sorted_ints[ $i - 1 ] != $diff ) {
            say 'false';
            return;
        }
    }

    say 'true';
}

예시

$ ./ch-2.py 1 3 5 7 9
True

$ ./ch-2.py 9 1 7 5 3
True

$ ./ch-2.py 1 2 4 8 16
False

$ ./ch-2.py 5 -1 3 1 -3
True

$ ./ch-2.py 1.5 3 0 4.5 6
True

$ ./ch-2.py 0.1 0.3 0.2 0.4
True
Back to Blog

관련 글

더 보기 »

팰린드롬 검사기

팔린드롬이란 무엇인가? 팔린드롬은 단어, 구절, 숫자 또는 기타 문자 시퀀스로, 공백, 구두점 및 대소문자를 무시하고 앞뒤가 동일하게 읽히는 것을 말한다.

중첩 리스트 평탄화

여러분, 안녕하세요! 👋 요즘 제가 좀 조용했죠. 사실 지난주에 꽤 심한 독감에 걸려서 완전히 쓰러졌어요. 🤒 그게 제가 …