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

먹보·2024년 4월 2일
0
post-thumbnail

1. 문자열 바꿔서 찾기

문제 설명

문자 "A"와 "B"로 이루어진 문자열 myString과 pat가 주어집니다. myString의 "A"를 "B"로, "B"를 "A"로 바꾼 문자열의 연속하는 부분 문자열 중 pat이 있으면 1을 아니면 0을 return 하는 solution 함수를 완성하세요.

예제

코드

function solution(myString, pat) {
  let reversed = "";
  for (let i = 0 ; i < myString.length ; i++) {
    if (myString[i] === "A") {
      reversed += "B";
    } else {
      reversed += "A";
    }
  }
  return Number(reversed.includes(pat));
}

🗒️코멘트

NULL


2. l로 만들기

문제 설명

알파벳 소문자로 이루어진 문자열 myString이 주어집니다. 알파벳 순서에서 "l"보다 앞서는 모든 문자를 "l"로 바꾼 문자열을 return 하는 solution 함수를 완성해 주세요.

예제

코드

function solution(myString) {
  let answer = "";
  const l = "l";
  const lCode = l.charCodeAt(0);
  for (let i = 0 ; i < myString.length ; i++) {
    if (myString.charCodeAt(i) < lCode) {
      answer += "l"
    } else {
      answer += myString[i]
    }
  };
  return answer;
};

//다른풀이 - 1
function solution(myString) {
    return [...myString].map((v) => v < 'l' ? 'l' : v).join('');
}

//다른풀이 - 2
const solution = myString => myString.replace(/[a-k]/g,'l')

🗒️코멘트

오랜만에 써보는 charCodeAt!

알파벳의 UTF-16 코드 유닛으로 순서를 판단했다.

다른 풀이는 살짝 봤는데 자바스크립트에서는 알파벳간의 비교가 가능한 것 같다.

또한 정규표현식을 이용했으면 조금 더 간단했던 문제다!


3. 특별한 이차원 배열 2

문제 설명

n × n 크기의 이차원 배열 arr이 매개변수로 주어질 때, arr이 다음을 만족하면 1을 아니라면 0을 return 하는 solution 함수를 작성해 주세요.

  • 0 ≤ i, j < n인 정수 i, j에 대하여 arr[i][j] = arr[j][i]

예제

코드

function solution(arr) {
    const n = arr.length; 
    for (let i = 0; i < n; i++) {
        for (let j = 0; j < n; j++) {
            if (arr[i][j] !== arr[j][i]) {  
                return 0;
            }
        }
    }
    return 1;
}

🗒️코멘트

아무리 생각해봐도 2중 for문 밖에 생각이 나질 않는다.

다른 방식은 어떻게 해야 할까?


4. 가까운 1 찾기

문제 설명

정수 배열 arr가 주어집니다. 이때 arr의 원소는 1 또는 0입니다. 정수 idx가 주어졌을 때, idx보다 크면서 배열의 값이 1인 가장 작은 인덱스를 찾아서 반환하는 solution 함수를 완성해 주세요.

단, 만약 그러한 인덱스가 없다면 -1을 반환합니다.

예제

코드

function solution(arr, idx) {
  for (let i = idx; i < arr.length ; i++) {
    console.log(i)
    if (arr[i] === 1) {
      return i
    } 
  }
  return -1;
};

🗒️코멘트

NULL


5. 콜라츠 수열 만들기

문제 설명

모든 자연수 x에 대해서 현재 값이 x이면 x가 짝수일 때는 2로 나누고, x가 홀수일 때는 3 * x + 1로 바꾸는 계산을 계속해서 반복하면 언젠가는 반드시 x가 1이 되는지 묻는 문제를 콜라츠 문제라고 부릅니다.

그리고 위 과정에서 거쳐간 모든 수를 기록한 수열을 콜라츠 수열이라고 부릅니다.

계산 결과 1,000 보다 작거나 같은 수에 대해서는 전부 언젠가 1에 도달한다는 것이 알려져 있습니다.

임의의 1,000 보다 작거나 같은 양의 정수 n이 주어질 때 초기값이 n인 콜라츠 수열을 return 하는 solution 함수를 완성해 주세요.

예제

코드

function solution(n) {
  const collatzArr = [n];
  while (n != 1) {
    if (n % 2 === 0) {
      n = n/2;
      collatzArr.push(n);
    } else {
      n = (3*n+1)
      collatzArr.push(n);
    }
  }
  return collatzArr;
}

//다른 풀이
function solution(n, arr = []) {
    arr.push(n)
    if (n === 1) return arr
    if (n % 2 === 0) return solution(n / 2, arr)
    return solution(3 * n + 1, arr)
}

🗒️코멘트

재귀법을 이용해서 한 번 문제를 풀어보았다


6. 수 조작하기2

문제 설명

정수 배열 numLog가 주어집니다. 처음에 numLog[0]에서 부터 시작해 "w", "a", "s", "d"로 이루어진 문자열을 입력으로 받아 순서대로 다음과 같은 조작을 했다고 합시다.

  • "w" : 수에 1을 더한다.
  • "s" : 수에 1을 뺀다.
  • "d" : 수에 10을 더한다.
  • "a" : 수에 10을 뺀다.

그리고 매번 조작을 할 때마다 결괏값을 기록한 정수 배열이 numLog입니다. 즉, numLog[i]는 numLog[0]로부터 총 i번의 조작을 가한 결과가 저장되어 있습니다.

주어진 정수 배열 numLog에 대해 조작을 위해 입력받은 문자열을 return 하는 solution 함수를 완성해 주세요.

예제

코드

function solution(numLog) {
  const commend = {
    "1" : "w",
    "-1" : "s",
    "10" : "d",
    "-10" : "a"
  };
  let answer = "";
  for (let i = 0 ; i < numLog.length-1 ; i++){
    const j = i+1;
    const substraction = numLog[j] - numLog[i]
    answer += (commend[substraction]).toString();
  }
  return answer;
}

🗒️코멘트

NULL


7. 특별한 이차원 배열 1

문제 설명

정수 n이 매개변수로 주어질 때, 다음과 같은 n × n 크기의 이차원 배열 arr를 return 하는 solution 함수를 작성해 주세요.

arr[i][j] (0 ≤ i, j < n)의 값은 i = j라면 1, 아니라면 0입니다.

예제

코드

function solution(n) {
  const matrix = [];
  for (let i = 0; i < n; i++) {
    const row = new Array(n).fill(0);
    row[i] = 1;
    matrix.push(row);
  }
  return matrix;
}

🗒️코멘트

NULL


8. 간단한 식 계산하기

문제 설명

문자열 binomial이 매개변수로 주어집니다. binomial은 "a op b" 형태의 이항식이고 a와 b는 음이 아닌 정수, op는 '+', '-', '*' 중 하나입니다. 주어진 식을 계산한 정수를 return 하는 solution 함수를 작성해 주세요.

예제

코드

function solution(binomial) {
  const operators = {
    '+': (a, b) => a + b,
    '-': (a, b) => a - b,
    '*': (a, b) => a * b,
  };

  const [firstEl, operator, lastEl] = binomial.split(' ');
  const expression = operators[operator];
  return expression(Number(firstEl), Number(lastEl));
}

🗒️코멘트

NULL


9. 접미사 배열

문제 설명

어떤 문자열에 대해서 접미사는 특정 인덱스부터 시작하는 문자열을 의미합니다. 예를 들어, "banana"의 모든 접미사는 "banana", "anana", "nana", "ana", "na", "a"입니다.
문자열 my_string이 매개변수로 주어질 때, my_string의 모든 접미사를 사전순으로 정렬한 문자열 배열을 return 하는 solution 함수를 작성해 주세요.

예제

코드

function solution(my_string) {
  const wordLength = my_string.length;
  const suffix = [];
  for (let i = 0 ; i < wordLength ; i++) {
    suffix.push(my_string.slice(i));
  }
  return suffix.sort()
};

🗒️코멘트

NULL


10. 덧셈 식 출력하기

문제 설명

두 정수 a, b가 주어질 때 다음과 같은 형태의 계산식을 출력하는 코드를 작성해 보세요.

  • a + b = c

예제

코드

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

let input = [];

rl.on('line', function (line) {
    input = line.split(' ')
}).on('close', function () {
    console.log(`${input[0]} + ${input[1]} = ${Number(input[0]) + Number(input[1])}`);
});

🗒️코멘트

NULL


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

0개의 댓글