주간 챌린지: 새해, 새로운 도전

발행: (2026년 1월 2일 오후 02:39 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

새해 복 많이 받으세요, 여러분.

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

Task 1: Min Abs Diff

Task

정수로 이루어진 서로 다른 원소들의 배열이 주어집니다.

절대 차이가 최소인 모든 원소 쌍을 찾는 스크립트를 작성하세요.

* `a`, `b` are from the given array.
* `a  list:
    ints = sorted(ints)
    min_abs_diff = None
    result = []

    for i in range(len(ints) - 1):
        abs_diff = ints[i + 1] - ints[i]
        if min_abs_diff is None or abs_diff  0`.

Task 2: Shift Matrix

Task

주어진 행렬 k 번을 이동시키는 스크립트를 작성하세요.

My solution

Python

def shift_grid(matrix: list[list[int]], k: int) -> list[list[int]]:
    row_length = len(matrix[0])
    for row in matrix:
        if len(row) != row_length:
            raise ValueError("All rows must have the same length")

    flattened_list = [num for row in matrix for num in row]
    k = k % len(flattened_list)
    rotated_list = flattened_list[-k:] + flattened_list[:-k]

    new_matrix = []
    for i in range(0, len(rotated_list), row_length):
        new_matrix.append(rotated_list[i:i + row_length])

    return new_matrix

Perl

sub main ( $matrix_json, $k ) {
    my $matrix = decode_json($matrix_json);

    my $row_length = scalar( @{ $matrix->[0] } );
    foreach my $row (@$matrix) {
        if ( scalar(@$row) != $row_length ) {
            die "All rows must have the same length\n";
        }
    }

    my @flattened_list = map { @$_ } @$matrix;
    $k = $k % scalar(@flattened_list);
    splice( @flattened_list, 0, 0, splice( @flattened_list, -$k ) );

    my @new_matrix = ();
    for ( my $i = 0 ; $i <= $#flattened_list ; $i += $row_length ) {
        push @new_matrix, [ @flattened_list[ $i .. $i + $row_length - 1 ] ];
    }

    say '('
        . join( ",\n ",
            map { '[' . join( ', ', @$_ ) . ']' } @new_matrix )
      . ',)';
}

Examples

$ ./ch-2.py "[[1, 2, 3], [4, 5, 6], [7, 8, 9]]" 1
([9, 1, 2],
 [3, 4, 5],
 [6, 7, 8],)

$ ./ch-2.py "[[10, 20], [30, 40]]" 1
([40, 10],
 [20, 30],)

$ ./ch-2.py "[[1, 2], [3, 4], [5, 6]]" 1
([6, 1],
 [2, 3],
 [4, 5],)

$ ./ch-2.py "[[1, 2, 3], [4, 5, 6]]" 5
([2, 3, 4],
 [5, 6, 1],)

$ ./ch-2.py "[[1, 2, 3, 4]]" 1
([4, 1, 2, 3],)
Back to Blog

관련 글

더 보기 »

66. 플러스 원

문제 설명: 당신은 큰 정수를 정수 배열 digits 로 표현한 것을 받았습니다. 여기서 각 digitsi 는 정수의 iᵗʰ 자리수입니다. 그 자리수는 …

100일 중 1일

오늘은 Python과 PyCharm을 다운로드하고 설정하는 것부터 시작했습니다. 그 후에 print statements, string concatenation 및 manipulation을 연습했으며, 그리고 us...