문제 : 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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;
}
🗒️코멘트 : 처음으로 마음에 들지 않는 문제가 나왔다...문제가 명확하지 않아 그냥 넘어가고 싶었던 문제..
문제 : 숫자로 이루어진 문자열 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개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 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. 더한 값이 소수인지 판별한다.