daily 알고리즘 : 프로그래머스 0 level 5일차

소히·2022년 10월 29일
0

알고리즘Daily

목록 보기
9/22
post-thumbnail

짝수 홀수 개수


문제

정수가 담긴 리스트 num_list가 주어질 때, num_list의 원소 중 짝수와 홀수의 개수를 담은 배열을 return 하도록 solution 함수를 완성해보세요.


제한사항

  • 1 ≤ num_list의 길이 ≤ 100
  • 0 ≤ num_list의 원소 ≤ 1,000

입출력 예

  • [1, 2, 3, 4, 5]에는 짝수가 2, 4로 두 개, 홀수가 1, 3, 5로 세 개 있습니다.

풀이

answer 초기 배열 설정 해 준 후 짝수, 홀수 일 때마다 값 +1을 해주었다.

function solution(num_list) {
  let answer = [0, 0];
  for (let i of num_list) {
    i % 2 === 0 ? (answer[0] += 1) : (answer[1] += 1);
  }
  return answer;
}

하기는 다른 사람 풀이 인데 answer[a%2] 로 짝수,홀수를 표현한 부분이 매우 인상적이었다...

function solution(num_list) {
  var answer = [0, 0];

  for (let a of num_list) {
    answer[a % 2] += 1;
  }

  return answer;
}

문자 반복 출력하기


문제

문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string에 들어있는 각 문자를 n만큼 반복한 문자열을 return 하도록 solution 함수를 완성해보세요.


제한사항

  • 2 ≤ my_string 길이 ≤ 5
  • 2 ≤ n ≤ 10
  • "my_string"은 영어 대소문자로 이루어져 있습니다.

입출력 예

  • "hello"의 각 문자를 세 번씩 반복한 "hhheeellllllooo"를 return 합니다.

풀이

내키진 않았지만 이중 for문으로 문제를 해결하였다...
repeat()을 알기 전까진...

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

repeat메서드는 문자열을 반복한 값을 반환한다.
매개변수로 받은 n 번 만큼 반복 시켜 문자열을 출력해주면 훨씬 간단해진다.

function solution(my_string, n) {
  let answer = [...my_string].map((el) => el.repeat(n)).join("");
  return answer;
}


특정 문자 제거하기


문제

문자열 my_string과 문자 letter이 매개변수로 주어집니다. my_string에서 letter를 제거한 문자열을 return하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ my_string의 길이 ≤ 100
  • letter은 길이가 1인 영문자입니다.
  • my_string과 letter은 알파벳 대소문자로 이루어져 있습니다.
  • 대문자와 소문자를 구분합니다.

입출력 예

  • "BCBdbe" 에서 "B"를 모두 제거한 "Cdbe"를 return합니다.

풀이

이 풀이는 filter 메서드로 간단하게 풀 수 있었지만, 다른 사람 풀이가 인상깊어 포스팅한다.

<나의 풀이>

function solution(my_string, letter) {
  return [...my_string].filter((el) => el !== letter).join("");
}

<다른 사람 풀이>

split메서드를 사용하여 letter값을 제외시키는 방법!

function solution(my_string, letter) {
  const answer = my_string.split(letter).join("");
  return answer;
}

다음에 올 숫자


문제

등차수열 혹은 등비수열 common이 매개변수로 주어질 때, 마지막 원소 다음으로 올 숫자를 return 하도록 solution 함수를 완성해보세요.


제한사항

  • 2 < common의 길이 < 1,000
  • -1,000 < common의 원소 < 2,000
  • 등차수열 혹은 등비수열이 아닌 경우는 없습니다.
  • 공비가 0인 경우는 없습니다.

입출력 예

  • [1, 2, 3, 4]는 공차가 1인 등차수열이므로 다음에 올 수는 5이다.
  • [2, 4, 8]은 공비가 2인 등비수열이므로 다음에 올 수는 16이다.

풀이

등차수열과 등비수열 일 때를 분기하여 값을 리턴해주었다.

function solution(common) { 
  if (common[1] - common[0] === common[2] - common[1]) {
    return common[1] - common[0] + common[common.length - 1]; // 등차수열 일 때
  } else {
    return (common[1] / common[0]) * common[common.length - 1];
  } // 등비수열 일 때
}

OX 퀴즈


문제

덧셈, 뺄셈 수식들이 'X [연산자] Y = Z' 형태로 들어있는 문자열 배열 quiz가 매개변수로 주어집니다. 수식이 옳다면 "O"를 틀리다면 "X"를 순서대로 담은 배열을 return하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ num_list의 길이 ≤ 1,000
  • 0 ≤ num_list의 원소 ≤ 1,000

입출력 예

  • 연산 기호와 숫자 사이는 항상 하나의 공백이 존재합니다. 단 음수를 표시하는 마이너스 기호와 숫자 사이에는 공백이 존재하지 않습니다.
  • 1 ≤ quiz의 길이 ≤ 10
  • X, Y, Z는 각각 0부터 9까지 숫자로 이루어진 정수를 의미하며, 각 숫자의 맨 앞에 마이너스 기호가 하나 있을 수 있고 이는 음수를 의미합니다.
  • X, Y, Z는 0을 제외하고는 0으로 시작하지 않습니다.
  • -10,000 ≤ X, Y ≤ 10,000
  • -20,000 ≤ Z ≤ 20,000
  • [연산자]는 + 와 - 중 하나입니다.

풀이

구조분해할당으로 좌변, 우변 식을 분리 한 후 eval 메서드를 사용하여 좌변을 계산 후 우변과 비교하였다.

function solution(quiz) {
  return quiz.map((el) => {
    const [left, right] = el.split(" = ");
    return eval(left) === +right ? "O" : "X";
  });
}

이 밖에 푼 문제 : 연속된 수의 합, 직각삼각형 출력하기, 가장 큰 수 찾기, 종이자르기

0개의 댓글