1. 수열과 구간 쿼리 4
목표 : 일정구간에서 규칙에 만족하는 연산 후 반환
//입력(arr, queries)
[0, 1, 2, 4, 3] , [[0, 4, 1],[0, 3, 2],[0, 3, 3]]
//출력
[3, 2, 4, 6, 4]
function solution(arr, queries) {
for (let [s, e, k] of queries) {
for(let i = s; i<=e; i++){
if( i % k == 0){
arr[i] += 1;
}
}
}
return arr
}
queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴이다.
- 각
query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 i가 k의 배수이면 arr[i]에 1을 더한다.
queries의 길이만큼 반복하고 각 원소들을 s, e, k로 선언한다.
s부터 e까지 반복하고, i를 k로 나누어떨어지면, arr[i]에 1을 더해준다.
2. 배열 만들기 2
목표 : 두 정수 사이에서 0과 5로만 이루어진 모든 정수를 오름차순으로 반환
//입력(l, r)
5, 555
//출력
[5, 50, 55, 500, 505, 550, 555]
function solution(l, r) {
let result = [];
for (let i = l; i <= r; i++) {
if (String(i).split('').every(digit => ['0', '5'].includes(digit))) {
result.push(i);
}
}
return result.length ? result : [-1];
}
- 정수
l과 r의 사이에 있는 정수들 중 0과5로만 이루어진 숫자를 배열에 담은 후 반환
- 결과를 담을
result배열을 선언하고, l부터 r까지 반복한다.
String(i).split('')는 숫자 i를 문자단위로 자른다.
every(digit => ['0', '5'].includes(digit))는 잘린 모든 문자들에 대해서 0과 5로만 이루어져 있는지 검사한다.
3. 카운트 업
목표 : start부터 end까지의 숫자를 차례로 담은 리스트를 return
//입력(start, end)
3, 10
//출력
[3, 4, 5, 6, 7, 8, 9, 10]
function solution(start, end) {
let result = [];
for(let i = start; i<=end; i++) result.push(i)
return result
}
- 반복문을 사용하여 배열에
i를 담은 후 return하면 된다.
4. 콜라츠 수열 만들기
목표 : 짝수일 때는 x÷2, 홀수일 때는 3 * x + 1
//입력
10
//출력
[10, 5, 16, 8, 4, 2, 1]
function solution(n) {
var answer = [];
while (true){
answer.push(n)
if(n == 1) break;
n = (n%2 == 0) ? n/2 : 3*n+1;
}
return answer;
}
while문을 사용해 배열에n을 push한다.
n이 1인지 검사하여, 1이면 반복문을 탈출한다.
- 3항 연산자를 사용하여,
n이 홀짝인지 구분하고 각각 다른 연산후 n을 바꾼다.
5. 배열 만들기 4
목표 : 주어진 정수배열을 일정한 규칙을 이용해 새로운 배열 생성하기
//입력
[1, 4, 2, 5, 3]
//출력
[1, 2, 3]
function solution(arr) {
var stk = [];
let i = 0;
while (i < arr.length) {
if (stk.length === 0 || stk[stk.length - 1] < arr[i]) {
stk.push(arr[i]);
i++;
} else {
stk.pop();
}
}
return stk;
}
- 만약
stk가 빈 배열이라면 arr[i]를 stk에 추가하고 i에 1을 더한다.
stk에 원소가 있고, stk의 마지막 원소가 arr[i]보다 작으면 arr[i]를 stk의 뒤에 추가하고 i에 1을 더한다.
stk에 원소가 있는데 stk의 마지막 원소가 arr[i]보다 크거나 같으면 stk의 마지막 원소를 stk에서 제거한다.
while문을 사용하여 arr의 길이만큼 반복한다.
stk의 길이가 0이거나, 마지막 원소가 arr[i]보다 작다면, stk에 arr[i]를 추가해주고, i를 증가시킨다.
- 위와 같은 조건이 아니라면
stk의 마지막 원소를 제거한다.