<?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번에 걸쳐 두 개의 숫자를 입력받고, 각 입력마다 해당 범위의 숫자를 역순으로 바꾸는 작업을 수행합니다. 모든 입력이 처리된 후에는 최종적으로 얻어진 배열을 출력합니다.