카드 역배치

Hyeseong·2023년 6월 17일
0

문제

코드

<?php

$li = range(1, 20);

for ($i = 0; $i < 10; $i++) {
    // In real scenario, this should be read from stdin
    $inputs = explode(' ', trim(fgets(STDIN)));
    $m = (int)$inputs[0];
    $n = (int)$inputs[1];

    $a = array_slice($li, 0, $m - 1);
    $b = array_reverse(array_slice($li, $m - 1, $n - $m + 1));
    $c = array_slice($li, $n);

    $li = array_merge($a, $b, $c);
}

foreach ($li as $item) {
    echo $item . ' ';
}

?>

설명

$li = range(1, 20);

이 부분에서는 PHP의 range 함수를 이용하여 1부터 20까지의 숫자를 갖는 배열을 생성하고 li 변수에 할당합니다.

for ($i = 0; $i < 10; $i++) {...}

이 for문은 10번의 반복을 수행합니다. 각 반복마다 특정 범위의 숫자를 역순으로 바꾸는 작업이 이루어집니다.

$inputs = explode(' ', trim(fgets(STDIN)));

사용자로부터 두 개의 숫자를 입력받아 공백을 기준으로 분리합니다. 이 두 숫자는 역순으로 바꿀 범위를 결정합니다.

$m = (int)$inputs[0];
$n = (int)$inputs[1];

입력받은 두 개의 숫자를 각각 m과 n에 할당합니다.

$a = array_slice($li, 0, $m - 1);

배열 li에서 처음부터 m-1까지의 요소를 새 배열 a에 저장합니다.

$b = array_reverse(array_slice($li, $m - 1, $n - $m + 1));

배열 li에서 m-1부터 n까지의 요소를 선택하고, 이를 역순으로 만들어 새 배열 b에 저장합니다.

$c = array_slice($li, $n);

배열 li에서 n 이후의 모든 요소를 새 배열 c에 저장합니다.

$li = array_merge($a, $b, $c);

배열 a, b, c를 순서대로 합쳐 새 배열 li를 만듭니다. 이 때, 배열 b는 이미 역순으로 되어 있으므로, 결과적으로 m부터 n까지의 요소가 역순으로 바뀝니다.

foreach ($li as $item) {echo $item . ' ';}

최종적으로 만들어진 배열 li의 모든 요소를 순서대로 출력합니다. 요소 사이에는 공백이 들어갑니다. 이 부분에서는 PHP의 foreach 반복문을 이용하고 있습니다.
이 코드를 실행하면, 사용자로부터 10번에 걸쳐 두 개의 숫자를 입력받고, 각 입력마다 해당 범위의 숫자를 역순으로 바꾸는 작업을 수행합니다. 모든 입력이 처리된 후에는 최종적으로 얻어진 배열을 출력합니다.

profile
어제보다 오늘 그리고 오늘 보다 내일...

0개의 댓글