프로그래머스 Day - 15

ᵁ-ᴷᴺᴼᵂᴺ·2023년 6월 11일
post-thumbnail

1. 조건에 맞게 수열 반환하기 1

문제 설명

  • 정수배열 arr각 원소의 값이 50보다 크거나 같은 짝수라면 2로 나눈다.
  • 정수배열 arr각 원소의 값이 50보다 작은 홀수라면 2를 곱한다.
//입력
[1, 2, 3, 100, 99, 98]	
//출력
[2, 2, 6, 50, 99, 49]
function solution(arr) {
    return arr.map(num => {
        if(num >= 50 && !(num % 2)) return num / 2;
        if(num < 50 && num % 2) return num * 2;
        return num;
    })
}

풀이 설명

  • map()을 사용하여 배열 내의 모든 요소를 순회하며 연산을 수행한다.
  • if문을 사용하여 각 배열의 요소가 담긴 num50보다 큰지 작은지를 판단하여 다르게 연산하고 연산한 결과를 return한다.
  • 결과적으로는 배열에 속한 모든 요소들이 연산을 마친 후 배열로 반환된다.

2. 조건에 맞게 수열 반환하기 2

문제설명

  • arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나눈다.
  • arr의 각 원소에 대해 값이 50보다 작은 홀수라면 2를 곱하고 다시 1을 더한다.
  • 위 작업을 x번 반복한 결과인 배열을 arr(x)라고 표현했을 때, arr(x) = arr(x + 1)x가 항상 존재한다.
  • x중 가장 작은 값을 반환.
//입력
[1, 2, 3, 100, 99, 98]	
//출력
5
function solution(arr) {
    let i = 0;
    while(!arr.every(num => (num >= 50 && num % 2 == 1)||(num < 50 && num % 2 == 0))){
        arr = arr.map(num => {
            if(num >= 50 && num % 2 == 0) return num / 2;
            if(num < 50 && num % 2 == 1) return num * 2 + 1;
            return num;
        })
        i++;
    }
    return i;
}

풀이 설명

  • 반복한 번수를 저장할 i0으로 선언한다.
  • while문을 작성하는데, 모든 원소가 조건에 맞는지 검사하는 every()메서드를 사용하여 arr의 모든 원소들을 num >= 50 && num % 2 == 1인지와 num < 50 && num % 2 == 0인지 검사한다. 이것을 이용해 모든 원소들이 조건에 만족하지 않을때 까지 반복을 진행한다.
  • 반복문 안은 위 1번문제를 재사용했다.

3. 1로 만들기

문제설명

짝수라면 2로 나누고, 홀수라면 1을 뺀 뒤 2로 나누고 1이 될 때 까지 반복하고 반복한 번수를 반환하라.

//입력
[12, 4, 15, 1, 14]	
//출력
11
function solution(num_list) {
    let cnt = 0;
    for (let x of num_list) {
        while (x !== 1){
            if(x % 2 == 0) {
                x /= 2
                cnt++
            } else {
                x = (x-1)/2
                cnt++
            }
        }
    }
    return cnt
}

풀이 설명

  • 반복한 번수를 카운트 할 cnt변수를 0으로 선언하고, num_list의 모든 원소들에 대해 반복한다.
  • while문을 사용하여 x1이 될때 까지 반복한다.
  • 짝수인지 홀수인지 확인하여 각각에 알맞은 연산하고 재할당하고, cnt1더해준다.

4. 길이에 따른 연산

문제설명

  • 리스트의 길이가 11 이상이면 리스트에 있는 모든 원소의 을 반환한다.
  • 리스트의 길이가 10 미만이면 리스트에 있는 모든 원소의 을 반환한다.
//입력
[3, 4, 5, 2, 5, 4, 6, 7, 3, 7, 2, 2, 1]
//출력
51
function solution(num_list) {
    let res = 0;
    if(num_list.length >= 11) {
        num_list.forEach((num) => {res += num})
    } else {
        res++
        num_list.forEach((num) => {res *= num})
    }
    return res
}

풀이 설명

  • 연산 결과를 저장하고 반환할 변수 res를 0으로 선언한다.
  • num_list의 길이가 11이상인지 검사하고 이상이라면 배열 전체를 순회하는 forEach()메서드를 사용하여 res에 모든 원소들을 더해준다.
  • 배열의 길이가 10미망니라면 res+1을 해주고 모든 원소를 res에 곱할당 해준다.

5. 원하는 문자열 찾기

문제설명

알파벳으로 이루어진 문자열 myStringpat이 주어졌을 때 myString의 연속된 부분 문자열 중 pat이 존재하면 1을 그렇지 않으면 0을 반환하여라.

//입력(myString,  pat)
"AbCdEfG",  "aBc"
//출력
`
function solution(myString, pat) {
    return myString.toLowerCase().includes(pat.toLowerCase()) ? 1 : 0
}

풀이 설명

  • includes()메서드를 사용하여 myStringpat으로 주어진 문자열이 있는지 확인했을 때, 3항연산자를 사용하여 있으면 1, 없으면 0을 반환하도록 하였다.
  • 문제에서는 대문자 소문자가 섞여 있기 때문에 검사를 제대로 할 수 없기 때문에, 모든 문자를 소문자로 바꿔주는 toLowerCase()메서드를 사용하였다.
profile
ΔIM ΩΠ ҒULLSTΔCҜ

0개의 댓글