JavaScript - 프로그래머스 레벨 : 1(12) - ORDER BY '정답률'

먹보·2023년 1월 17일
0

1. 모의고사

문제 : 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.

1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...

1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.

function solution(answers) {
  const stu_A = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5];
  const stu_B = [2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5];
  const stu_C = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
  let score_A = 0;
  let score_B = 0;
  let score_C = 0;

  for (let i = 0; i < answers.length; i++) {
    if (answers[i] === stu_A[i%5]) {      
      score_A++;     
    }
    if (answers[i] === stu_B[i%8]) {
      score_B++;
    }
    if (answers[i] === stu_C[i%10]) {
      score_C++;
    }
  }

  return rank(score_A, score_B, score_C);
}

function rank(a, b, c) {
  let order = [];

  if (a > b && a > c) order = [1];
  if (a > b && a === c) order = [1, 3];
  if (a > b && a < c) order = [3];

  if (a === b && a > c) order = [1, 2];
  if (a === b && a === c) order = [1, 2, 3];
  if (a === b && a < c) order = [3];

  if (a < b && b < c) order = [3];
  if (a < b && b === c) order = [2, 3];
  if (a < b && b > c) order = [2];

  if(a===0&&b===0&&c===0)  order = [];

  return order;
}

🗒️코멘트 : 처음으로 마음에 들지 않는 문제가 나왔다...문제가 명확하지 않아 그냥 넘어가고 싶었던 문제..

2. 크기가 작은 부분문자열

문제 : 숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.

예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.

function solution(t, p) {
    var answer = 0;
    const pl = p.length
    for (let i = 0 ; i+pl <= t.length ; i++){
        if(Number(t.slice(i,i+pl)) <= Number(p)){
            answer++
        }
    }
    return answer;
}

🗒️코멘트 : 생각보다 쉬운 문제

3. 소수 만들기

문제 : 주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.

function solution(num) {
  let count = 0;
  for (let i = 0; i < num.length - 2; i++) {
    for (let j = i + 1; j < num.length - 1; j++) {
      for (let k = j + 1; k < num.length; k++) {
        let sum = num[i] + num[j] + num[k];
        if (isPrime(sum)) count++;
      }
    }
  }
  return count;
}

function isPrime(n) {
  if (n <= 1) return false;
  if (n <= 3) return true;
  if (n % 2 === 0 || n % 3 === 0) return false;

  for (let i = 5; i * i <= n; i += 6) {
    if (n % i === 0 || n % (i + 2) === 0) return false;
  }
  return true;
}

🗒️코멘트 : 이것도 간단한 조합 문제
1. 주어진 갯수에서 랜덤으로 3개를 골라 더 한다.
2. 더한 값이 소수인지 판별한다.

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

0개의 댓글