리스트 자르기
문제
정수 n
과 정수 3개가 담긴 리스트 slicer
그리고 정수 여러 개가 담긴 리스트 num_list
가 주어집니다. slicer
에 담긴 정수를 차례대로 a
, b
, c
라고 할 때, n에 따라 다음과 같이 num_list
를 슬라이싱 하려고 합니다.
n = 1
: num_list
의 0번 인덱스부터 b번 인덱스까지
n = 2
: num_list
의 a
번 인덱스부터 마지막 인덱스까지
n = 3
: num_list
의 a
번 인덱스부터 b
번 인덱스까지
n = 4
: num_list
의 a
번 인덱스부터 b
번 인덱스까지 c
간격으로
올바르게 슬라이싱한 리스트를 return하도록 solution 함수를 완성해주세요.
- 제한사항
n
은 1, 2, 3, 4 중 하나입니다.slicer
의 길이 = 3slicer
에 담긴 정수를 차례대로a
,b
,c
라고 할 때- 0 ≤
a
≤b
≤num_list
의 길이 - 1 - 1 ≤
c
≤ 3
- 0 ≤
- 5 ≤
num_list
의 길이 ≤ 30 - 0 ≤
num_list
의 원소 ≤ 100
소스 코드
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let n = '';
let slicer = [];
let num_list = [];
let count = 0;
rl.on('line', (line) => {
if (count === 0) {
n = Number(line);
} else if (count === 1){
slicer = line.split(' ').map(Number)
} else {
num_list = line.split(' ').map(Number);
}
count++;
if (count > 2) {
rl.close();
}
}).on('close', () => {
const answer = solution(n, slicer, num_list);
console.log(answer);
});
const solution = (n, slicer, num_list) => {
switch (n) {
case 1:
return num_list.slice(0, slicer[1]+1);
case 2:
return num_list.slice(slicer[0]);
case 3:
return num_list.slice(slicer[0], slicer[1]+1);
case 4:
const list = num_list.slice(slicer[0], slicer[1]+1);
return list.filter((_, index) => index % slicer[2] === 0)
}
};
첫 번째로 나오는 음수
문제
정수 리스트 num_list
가 주어질 때, 첫 번째로 나오는 음수의 인덱스를 return하도록 solution 함수를 완성해주세요. 음수가 없다면 -1을 return합니다.
- 제한사항
- 5 ≤
num_list
의 길이 ≤ 100 - 10 ≤
num_list
의 원소 ≤ 100
- 5 ≤
소스 코드
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = '';
rl.on('line', (line) => {
input = line.split(' ').map(Number);
rl.close();
}).on('close', () => {
const answer = solution(input);
console.log(answer);
});
const solution = (num_list) => {
let count = 0;
while (true) {
if (num_list[count] < 0) {
return count;
}
if (count > num_list.length) {
return -1;
}
count++;
}
};
배열 만들기 3
문제
정수 배열 arr
와 2개의 구간이 담긴 배열 intervals
가 주어집니다.
intervals
는 항상 [[a1, b1], [a2, b2]]
의 꼴로 주어지며 각 구간은 닫힌 구간입니다. 닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다.
이때 배열 arr
의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요.
소스 코드
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let arr = [];
let intervals = [];
let count = 0;
rl.on('line', (line) => {
if (count === 0) {
arr = line.split(' ').map(Number);
} else {
intervals = line.split(' ').map(
item => item.split(','),
);
}
count++;
if (count > 1) {
rl.close();
}
}).on('close', () => {
const answer = solution(arr, intervals);
console.log(answer);
});
const solution = (arr, intervals) => {
let answer = [];
intervals.map(interval => {
answer.push(...arr.slice(interval[0], interval[1] + 1));
});
return answer;
};
배열 만들기 3
문제
정수 배열 arr
와 2개의 구간이 담긴 배열 intervals
가 주어집니다.
intervals
는 항상 [[a1, b1], [a2, b2]]
의 꼴로 주어지며 각 구간은 닫힌 구간입니다. 닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다.
이때 배열 arr
의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요.
- 제한사항
- 1 ≤
arr
의 길이 ≤ 100,000- 1 ≤
arr
의 원소 < 100
- 1 ≤
- 1 ≤
a1
≤b1
<arr
의 길이 - 1 ≤
a2
≤b2
<arr
의 길이
- 1 ≤
소스 코드
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let arr = [];
let intervals = [];
let count = 0;
rl.on('line', (line) => {
if (count === 0) {
arr = line.split(' ').map(Number);
} else {
intervals = line.split(' ').map(
item => item.split(','),
);
}
count++;
if (count > 1) {
rl.close();
}
}).on('close', () => {
const answer = solution(arr, intervals);
console.log(answer);
});
const solution = (arr, intervals) => {
let answer = [];
intervals.map(interval => {
answer.push(...arr.slice(interval[0], interval[1] + 1));
});
return answer;
};
2의 영역
문제
정수 배열 arr
가 주어집니다. 배열 안의 2가 모두 포함된 가장 작은 연속된 부분 배열을 return 하는 solution 함수를 완성해 주세요.
단, arr
에 2가 없는 경우 [-1]을 return 합니다.
- 제한사항
- 1 ≤
arr
의 길이 ≤ 100,000- 1 ≤
arr
의 원소 ≤ 10
- 1 ≤
- 1 ≤
소스 코드
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = '';
rl.on('line', (line) => {
input = line.split(' ').map(Number);
rl.close();
}).on('close', () => {
const answer = solution(input);
console.log(answer);
});
const solution = arr => {
const start = arr.indexOf(2);
if (start !== -1) {
const end = (arr.reverse()).indexOf(2);
return arr.reverse().slice(start, arr.length - end);
}
return [-1];
};
배열 조각하기
문제
정수 배열 arr
와 query
가 주어집니다.
query
를 순회하면서 다음 작업을 반복합니다.
짝수 인덱스에서는 arr
에서 query[i]
번 인덱스를 제외하고 배열의 query[i]
번 인덱스 뒷부분을 잘라서 버립니다.
홀수 인덱스에서는 arr
에서 query[i]
번 인덱스는 제외하고 배열의 query[i]
번 인덱스 앞부분을 잘라서 버립니다.
위 작업을 마친 후 남은 arr
의 부분 배열을 return 하는 solution 함수를 완성해 주세요.
- 제한사항
- 1 ≤
arr
의 길이 ≤ 100,000- 1 ≤
arr
의 원소 < 100
- 1 ≤
- 1 ≤
a1
≤b1
<arr
의 길이 - 1 ≤
a2
≤b2
<arr
의 길이
- 1 ≤
소스 코드
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let arr = [];
let query = [];
let count = 0;
rl.on('line', (line) => {
if (count === 0) {
arr = line.split(' ').map(Number);
} else {
query = line.split(' ').map(Number);
}
count++;
if (count > 1) {
rl.close();
}
}).on('close', () => {
const answer = solution(arr, query);
console.log(answer);
});
const solution = (arr, query) => {
let answer = arr;
for (let i = 0; i < query.length; i++) {
if (i % 2 === 0) {
answer = answer.slice(0, query[i] + 1);
} else {
answer = answer.slice(query[i]);
}
}
return answer;
};
Ghost