문제1
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다.
queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 i가 k의 배수이면 arr[i]에 1을 더합니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
입출력 예
arr queries result
[0, 1, 2, 4, 3] [[0, 4, 1],[0, 3, 2],[0, 3, 3]] [3, 2, 4, 6, 4]
문제2
정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를
오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다.
입출력 예
l r result
5 555 [5, 50, 55, 500, 505, 550, 555]
10 20 [-1]
문제3
정수 start_num와 end_num가 주어질 때,
start_num부터 end_num까지의 숫자를 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
입출력 예
start_num end_num result
3 10 [3, 4, 5, 6, 7, 8, 9, 10]
문제4
모든 자연수 x에 대해서 현재 값이 x이면 x가 짝수일 때는 2로 나누고,
x가 홀수일 때는 3 * x + 1로 바꾸는 계산을 계속해서 반복하면 언젠가는 반드시 x가 1이 되는지 묻는 문제를 콜라츠 문제라고 부릅니다.
그리고 위 과정에서 거쳐간 모든 수를 기록한 수열을 콜라츠 수열이라고 부릅니다.
계산 결과 1,000 보다 작거나 같은 수에 대해서는 전부 언젠가 1에 도달한다는 것이 알려져 있습니다.
임의의 1,000 보다 작거나 같은 양의 정수 n이 주어질 때 초기값이 n인 콜라츠 수열을 return 하는 solution 함수를 완성해 주세요.
입출력 예
n result
10 [10, 5, 16, 8, 4, 2, 1]
문제5
정수 배열 arr가 주어집니다. arr를 이용해 새로운 배열 stk를 만드려고 합니다.
변수 i를 만들어 초기값을 0으로 설정한 후 i가 arr의 길이보다 작으면 다음 작업을 반복합니다.
만약 stk가 빈 배열이라면 arr[i]를 stk에 추가하고 i에 1을 더합니다.
stk에 원소가 있고, stk의 마지막 원소가 arr[i]보다 작으면 arr[i]를 stk의 뒤에 추가하고 i에 1을 더합니다.
stk에 원소가 있는데 stk의 마지막 원소가 arr[i]보다 크거나 같으면 stk의 마지막 원소를 stk에서 제거합니다.
위 작업을 마친 후 만들어진 stk를 return 하는 solution 함수를 완성해 주세요.
🕹️ 문제를 풀기위해 알면 좋을 것
- 0은 모든 수의 배수이다
ㅋㅋㅋㅋㅋㅋ 0 * n == 0 이 되니까 0이 모든 수의 배수가 된다는 생각을 못했다.
근데 수학적으로 그렇단다...
2는 4의 배수인가? => true 4 = 2*2 이기 때문이다.
0 = 2*0 이므로 0은 2의 배수이다.... 라고 한다.
역설적으로 0 = n * 0 이 모든 n에 대해 성립하기 때문에 0은 모든 수의 배수라는 말이 된다.
- Array.every( )
Array.every(callbackFn)
Array.every(callbackFn, thisArg)
callbackFn : 배열의 각 요소에 대해 실행할 함수
thisArg : 콜백 함수를 실행할 때 this로 사용하는 값
every 함수는 배열의 모든 요소에 대해 콜백함수를 한번씩 호출하고,
콜백 함수의 값이 false을 반환할때 까지 호출을 반복합니다. false가 나오는 즉시 every()는 fasle를 반환하고 배열 순회를 중지합니다.
내 답안지
😩😭 문제 1 번 땡 틀림
function solution(arr, queries) {
for(let i=0; i < queries.length; i++){
const query = queries[i]
const [s,e,k] = query
if( s<=i && i <=e && i%k === 0){
arr[i] += 1
}
}
return arr
}
진짜 첫 시도도 틀렸다... 0이 모든수의 배수라는 걸 몰랐기 때문ㅠㅠㅠ
내 코드의 출력 값은
[ 1, 1, 2, 4, 3 ]
기댓값은
[ 3, 2, 4, 6, 4 ]
이전 문제에서 arr[i] 값을 갖고 k와 비교 했어서 똑같다고 생각해버린 것이 패착....
그래서 arr[i] 값이 아니라 s<= i <= e 사이의 정수값들과 k를 비교하는 걸로 바꿨지만 틀림ㅋㅋㅋㅋ
왜? 관성적으로 if 조건문에서도 i를 갖다 썼기 때문....
i는 queries의 인덱스 값으로 쓰고 있기 때문에 하나씩 갖다 쓰는 중이고
그 안에서 s,e,k 의 값을 갖다가 s~e 범위 안에서 arr[] 의 값을 조작해야하기 때문이다.
그래서 최종 1번 문제 답지
function solution1_2(arr, queries) {
for (let i = 0; i < queries.length; i++) {
const query = queries[i];
const [s, e, k] = query;
for(let j=s; j <= e; j++){
if(j%k ===0){
arr[j] += 1
}
}
}
return arr;
}
arr[j]의 범위를 지정하고 for문을 따로 돌려줬다.
문제 2번
일단 나는 "0"과 "5"로만 이루어진 모든 정수라고 해서 l<= n <=r 범위 안에 있는 5의 배수들을 따로 배열에 담았다.
그다음 그 배열의 각 인덱스의 요소마다 "0"과 "5"로만 이루어 져있는지 검사를 해 참이라면 result에 담아줬다.
for문을 다 돌고 났을때 조건을 만족하는 값이 없을 경우 == result.length 가 0일 경우 에는 [-1] 을 반환하도록 해줬다.
function solution(l, r) {
const arr = [];
const result = [];
for (let i = l; i <= r; i++) {
arr.push(i);
}
// 5의 배수들 거르기
const tempArr = arr.filter((item) => item % 5 === 0);
for(let j = 0; j < tempArr.length; j++){
if(String(tempArr[j]).split('').every((item) => item === "0" || item === "5")){
result.push(tempArr[j])
}
}
if(result.length < 1){
return [-1]
}
return result;
}
문제3번
function solution(start_num, end_num) {
const result =[]
for(let i=start_num; i <= end_num ; i++){
result.push(i)
}
return result
}
문제 4 콜라츠 수열 만들기
function solution(n) {
var answer = [n];
while(answer[answer.length-1] !== 1){
if(answer[answer.length-1]%2 ===0){
answer.push(answer[answer.length-1]/2)
}else if(answer[answer.length-1]%2 ===1){
answer.push(3*(answer[answer.length-1]) +1)
}
}
return answer
}
문제 5
function solution5(arr) {
var stk = [];
let i = 0;
while (i < arr.length) {
if (stk.length === 0) {
stk.push(arr[i]);
i++
}else if (stk[stk.length - 1] < arr[i]) {
stk.push(arr[i]);
i++;
} else if (stk[stk.length - 1] >= arr[i]) {
stk.pop();
}
}
return stk;
}
'JS 코테' 카테고리의 다른 글
<Javascript-CT> 기초 DAY 12 (0) | 2025.04.28 |
---|---|
<Javascript-CT> 기초 DAY 10 (0) | 2025.04.28 |
<Javascript-CT> 기초 DAY 9 (0) | 2025.04.27 |
<Javascript-CT> 기초 DAY 8 (1) | 2025.04.25 |
<Javascript-CT> 기초 DAY 6 (0) | 2025.04.24 |