문제
N개의 숫자가 순서대로 적힌 카드가 있습니다.
이 중 M번동안 범위 안에 있는 숫자들을 역순으로 배치합니다.
그 후, 왼쪽부터 숫자를 출력하는 프로그램을 작성하시오.
예를 들어, 카드에 숫자가 1부터 10까지 순서대로 적혀있고, M이 1이고 범위가 1, 2라면, 1과 2를 교체 후, 왼쪽부터 숫자를 출력한다.
입력
처음 배열에는 N과 M이 들어가고 그 다음 배열부터는 범위가 주어집니다.
예시
const test_case = [[5, 3], [2, 5], [1, 3], [2, 4]]
풀이
function reversedSubset(numbers) {
const n = numbers[0][0];
const m = numbers[0][1];
const result = Array.from({ length: n }, (_, index) => index + 1);
for (let i = 1; i <= m; i++) {
const min = numbers[i][0];
const max = numbers[i][1];
for (let j = 0; j < Math.ceil((max - min) / 2); j++) {
const k = min + j - 1;
const l = max - j - 1;
[result[k], result[l]] = [result[l], result[k]];
}
}
return result;
}
첫 번째 요소를 통해 카드의 숫자 n과 역순으로 카드를 만든 m을 가져옵니다.
그 다음 1부터 n까지 순서대로 카드의 순서 배열인 result를 만듭니다.
그 다음 배열부터 m번까지 반복문을 통해서 역순으로 배치할 범위를 찾습니다.
범위를 찾으면 범위의 min부터 역순이니 min과 max의 1/2까지 교환해줍니다.
'코딩문제' 카테고리의 다른 글
문자열의 특정 위치의 문자 가져오기 (0) | 2024.03.25 |
---|---|
조정된 평균 점수 (0) | 2024.03.25 |
나머지 개수 세기 (0) | 2024.03.24 |
출석하지 않은 강아지 찾기 (0) | 2024.03.24 |
지우개 교환 (0) | 2024.03.22 |