JavaScript - 프로그래머스 레벨 : 0(26) - Relatively New

먹보·2024년 4월 8일
0

1. 배열 만들기3

문제 설명

정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어집니다.

intervals는 항상 [[a1, b1], [a2, b2]]의 꼴로 주어지며 각 구간은 닫힌 구간입니다. 닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다.

이때 배열 arr의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요.

예제

코드

function solution(arr, intervals) {
  let answer = [];
  intervals.forEach((el) => {
    const newArr = arr.slice(el[0], el[1]+1);
    answer = answer.concat(newArr)
  })
  return answer;
}

🗒️코멘트

NULL


2. 문자열 돌리기

문제 설명

문자열 str이 주어집니다.
문자열을 시계방향으로 90도 돌려서 아래 입출력 예와 같이 출력하는 코드를 작성해 보세요.

예제

코드

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

let input = [];

rl.on('line', function (line) {
    input = [line];
}).on('close',function(){
    str = input[0];
    for (let i = 0 ; i < str.length ; i++) {
        console.log(str[i])
    }
});

🗒️코멘트

NULL


3. 주사위 게임 2

문제 설명

1부터 6까지 숫자가 적힌 주사위가 세 개 있습니다. 세 주사위를 굴렸을 때 나온 숫자를 각각 a, b, c라고 했을 때 얻는 점수는 다음과 같습니다.

  • 세 숫자가 모두 다르다면 a + b + c 점을 얻습니다.
  • 세 숫자 중 어느 두 숫자는 같고 나머지 다른 숫자는 다르다면 (a + b + c) × (a2 + b2 + c2 )점을 얻습니다.
  • 세 숫자가 모두 같다면 (a + b + c) × (a2 + b2 + c2 ) × (a3 + b3 + c3 )점을 얻습니다.

세 정수 a, b, c가 매개변수로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.

예제

코드

function solution(a, b, c) {
  const countUniqueNumber = new Set([a,b,c]).size;
  
  if (countUniqueNumber === 3) {
    return a + b + c;
  } else if (countUniqueNumber === 2) {
    return (a + b + c) * (a**2 + b**2 + c**2); 
  } else {
    return (a + b + c) * (a**2 + b**2 + c**2 ) * (a**3 + b**3 + c**3 )
  }
};

🗒️코멘트

재귀 함수를 사용해서 해당 문제를 조금 더 일반화하여 접근할 수 있을 것 같은데....생각이 나지 않는다.


4. 문자열 잘라서 정렬하기

문제 설명

문자열 myString이 주어집니다. "x"를 기준으로 해당 문자열을 잘라내 배열을 만든 후 사전순으로 정렬한 배열을 return 하는 solution 함수를 완성해 주세요.

단, 빈 문자열은 반환할 배열에 넣지 않습니다.

예제

코드

function solution(myString) {
    return myString.split('x').sort().filter((el) => el);
}

//다른 풀이
const solution=s=>s.match(/[^x]+/g).sort()

🗒️코멘트

정규 표현식은 정말 무궁무진한 것 같다.

아무리 생각해도 split과 sort 그리고 filter를 이용한 풀이법 밖에 머리속에서 생각이 나질 않는데...정규표현식 하나만으로 split과 filter 두마리 토끼를 다 잡았다.


5. 9로 나눈 나머지

문제 설명

음이 아닌 정수를 9로 나눈 나머지는 그 정수의 각 자리 숫자의 합을 9로 나눈 나머지와 같은 것이 알려져 있습니다.
이 사실을 이용하여 음이 아닌 정수가 문자열 number로 주어질 때, 이 정수를 9로 나눈 나머지를 return 하는 solution 함수를 작성해주세요.

예제

코드

function solution(number) {
  return number.split('').reduce((a,b) => Number(a)+Number(b)) % 9;
}

🗒️코멘트

NULL


6. 세로 읽기

문제 설명

문자열 my_string과 두 정수 m, c가 주어집니다. my_string을 한 줄에 m 글자씩 가로로 적었을 때 왼쪽부터 세로로 c번째 열에 적힌 글자들을 문자열로 return 하는 solution 함수를 작성해 주세요.

예제

코드

function solution(my_string, m, c) {
  let answer = "";
  for (let i = c-1 ; i < my_string.length ; i += m) {
    answer += my_string[i];
  }
  return answer;
};

🗒️코멘트

NULL


7. 등차수열의 특정한 항만 더하기

문제 설명

두 정수 a, d와 길이가 n인 boolean 배열 included가 주어집니다. 첫째항이 a, 공차가 d인 등차수열에서 included[i]가 i + 1항을 의미할 때, 이 등차수열의 1항부터 n항까지 included가 true인 항들만 더한 값을 return 하는 solution 함수를 작성해 주세요.

예제

코드

function solution(a, d, included) {
  let answer = 0;
  included.forEach((el, i) => {
    if (el) {
      answer += (a + d*i)
    }
  })
  return answer;
}

//다른 풀이
function solution(a, d, included) {
    return included.reduce((acc, flag, i) => {
        return flag ? acc + a + d * i : acc
    }, 0)
}

🗒️코멘트

reduce 정말 잘 써보고 싶다...


8. 문자열 섞기

문제 설명

길이가 같은 두 문자열 str1과 str2가 주어집니다.

두 문자열의 각 문자가 앞에서부터 서로 번갈아가면서 한 번씩 등장하는 문자열을 만들어 return 하는 solution 함수를 완성해 주세요.

예제

코드

function solution(str1, str2) {
  let answer = "";
  for (let i = 0; i < str1.length ; i++) {
    answer += str1[i] + str2[i]
  }
  return answer;
}

🗒️코멘트

NULL


9. 수열과 구간 쿼리 1

문제 설명

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e] 꼴입니다.

각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 arr[i]에 1을 더합니다.

위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.

예제

코드

function solution(arr, queries) {
    for (let query of queries) {
        const [start, end] = query;
        for (let i = start; i <= end; i++) {
            arr[i]++;
        }
    }
    return arr;
}

🗒️코멘트

NULL


10. 이차원 배열 대각선 순회하기

문제 설명

2차원 정수 배열 board와 정수 k가 주어집니다.

i + j <= k를 만족하는 모든 (i, j)에 대한 board[i][j]의 합을 return 하는 solution 함수를 완성해 주세요.

예제

코드

function solution(board, k) {
    let sum = 0;
    for (let i = 0; i < board.length; i++) {
        for (let j = 0; j < board[0].length; j++) {
            if (i + j <= k) {
                sum += board[i][j];
            }
        }
    }
    return sum;
}

🗒️코멘트

NULL


profile
🍖먹은 만큼 성장하는 개발자👩‍💻

0개의 댓글