프로그래머스 Day - 7

ᵁ-ᴷᴺᴼᵂᴺ·2023년 5월 29일
post-thumbnail

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에 대해 ik의 배수이면 arr[i]에 1을 더한다.
  • queries의 길이만큼 반복하고 각 원소들을 s, e, k로 선언한다.
  • s부터 e까지 반복하고, ik로 나누어떨어지면, 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];
}
  • 정수 lr의 사이에 있는 정수들 중 05로만 이루어진 숫자를 배열에 담은 후 반환
  • 결과를 담을 result배열을 선언하고, l부터 r까지 반복한다.
  • String(i).split('')는 숫자 i를 문자단위로 자른다.
  • every(digit => ['0', '5'].includes(digit))는 잘린 모든 문자들에 대해서 05로만 이루어져 있는지 검사한다.

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문을 사용해 배열에npush한다.
  • 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]보다 작다면, stkarr[i]를 추가해주고, i를 증가시킨다.
  • 위와 같은 조건이 아니라면 stk의 마지막 원소를 제거한다.
profile
ΔIM ΩΠ ҒULLSTΔCҜ

0개의 댓글