Front-End

프로그래머스 기초트레이닝 18일차 본문

알고리즘

프로그래머스 기초트레이닝 18일차

jeongsso 2023. 10. 10. 14:57

드디어 끝이 보여갑니다...

페이지수 1-2만 남았어요 ...!!

2페이지에도 5문항남아서 오늘안에 1페이지로 만들기가 목표입니다. .!

 

 

 

문제 91.  수열과 구간 쿼리 3


문제 설명

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [i, j] 꼴입니다.
각 query마다 순서대로 arr[i]의 값과 arr[j]의 값을 서로 바꿉니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.

 

 

입출력 예

arr queries result
[0, 1, 2, 3, 4] [[0, 3],[1, 2],[1, 4]] [3, 4, 1, 0, 2]

 

입출력 예 설명

 

 

저의 풀이!

function solution(arr, queries) {
    for (let i = 0; i < queries.length; i++) {
        const [a, b] = queries[i];
    
        [arr[a], arr[b]] = [arr[b], arr[a]];
    }
    return arr;
}

console.log(
    solution(
        [0, 1, 2, 3, 4],
        [
            [0, 3],
            [1, 2],
            [1, 4],
        ]
    )
);

 

 

메모

구조분해 할당으로 queries의 인자를 쉽게 접근할 수 있게 한 후 문제를 풀었습니다.

 

 

 

 

 

문제 92.  1로 만들기


문제 설명

정수가 있을 때, 짝수라면 반으로 나누고, 홀수라면 1을 뺀 뒤 반으로 나누면, 마지막엔 1이 됩니다. 예를 들어 10이 있다면 다음과 같은 과정으로 1이 됩니다.

10 / 2 = 5
(5 - 1) / 2 = 4
4 / 2 = 2
2 / 2 = 1
위와 같이 4번의 나누기 연산으로 1이 되었습니다.

정수들이 담긴 리스트 num_list가 주어질 때, num_list의 모든 원소를 1로 만들기 위해서 필요한 나누기 연산의 횟수를 return하도록 solution 함수를 완성해주세요.

 

입출력 예

num_list result
[12, 4, 15, 1, 14] 11

 

입출력 예 설명

12는 3번, 4는 2번, 15는 3번, 1은 0번, 14는 3번의 연산이 필요하기 때문에 총 11번의 연산이 필요합니다.

 

저의 풀이!

function solution(num_list) {
    let answer = 0;

    for (num of num_list) {
        let number = num;
        while (true) {
            if (number === 1) {
                break;
            }
            if (number % 2 === 0) {
                number = number / 2;
                    answer += 1;
            } else {
                number = (number - 1) / 2;
                answer += 1;
            }
        }
    }
    return answer;
}

console.log(solution([12, 4, 15, 1, 14]));

 

 

메모

while 문으로 무한 반복문을 돌려줬습니다.

조건 하나 걸어두고! '1일경우 멈추게 해주세요'라는 하나만 두고 말이죠!!
그리고 나머지는 원래 저희가 해야할 계산들을 홀수 짝수의 조건을 넣어 계산을 넣어줍니다!

 

 

 

문제 93.  세 개의 구분자


문제 설명

임의의 문자열이 주어졌을 때 문자 "a", "b", "c"를 구분자로 사용해 문자열을 나누고자 합니다.
예를 들어 주어진 문자열이 "baconlettucetomato"라면 나눠진 문자열 목록은 ["onlettu", "etom", "to"] 가 됩니다.
문자열 myStr이 주어졌을 때 위 예시와 같이 "a", "b", "c"를 사용해 나눠진 문자열을 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
단, 두 구분자 사이에 다른 문자가 없을 경우에는 아무것도 저장하지 않으며,
return할 배열이 빈 배열이라면 ["EMPTY"]를 return 합니다.

 

입출력 예

myStr result
"baconlettucetomato" ["onlettu", "etom", "to"]
"abcd" ["d"]
"cabab" ["EMPTY"]

 

 

입출력 예 설명

"c" 이전에는 "a", "b", "c" 이외의 문자가 없습니다.
"c" 이후에 문자열 "d"가 있으므로 "d"를 저장합니다.
따라서 ["d"]를 return 합니다.

"a", "b", "c" 이외의 문자가 존재하지 않습니다. 따라서 저장할 문자열이 없습니다.
따라서 ["EMPTY"]를 return 합니다.

 

 

저의 풀이!

function solution(myStr) {
    let arr = myStr.split(/[abc]/).filter(v => v);

    return arr.length ? arr : ['EMPTY'];
}

console.log(solution('cabab'));

 

 

메모

문자열을 split으로 구분자를 두되, 정규식을 넣어서 했습니다!
그렇게 하면 a, b, c로 이루어진 모든 구분자를 사용하게 됩니다!

 

Comments