n
이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요. 예를 들어 4가 입력된다면, 5를 return하면 됩니다.function solution(n) {
let answer = 0;
const pathObj = {};
const dfs = (number, path) => {
if (number < 0) {
return;
}
if (number === 0) {
if (!pathObj.hasOwnProperty(path)) {
answer++;
}
return;
}
dfs(number - 1, path + 1);
dfs(number - 2, path + 2);
}
dfs(n, '');
return answer;
}
function solution(n) {
const memo = [0, 1, 2];
for (let i = 3; i <= n; i++) {
memo[i] = (memo[i - 1] + memo[i -2]) % 1234567;
}
return memo[n];
}
예를 들어, 철 곡괭이는 다이아몬드를 캘 때 피로도 5가 소모되며, 철과 돌을 캘때는 피로도가 1씩 소모됩니다. 각 곡괭이는 종류에 상관없이 광물 5개를 캔 후에는 더 이상 사용할 수 없습니다.
마인은 다음과 같은 규칙을 지키면서 최소한의 피로도로 광물을 캐려고 합니다.
즉, 곡괭이를 하나 선택해서 광물 5개를 연속으로 캐고, 다음 곡괭이를 선택해서 광물 5개를 연속으로 캐는 과정을 반복하며, 더 사용할 곡괭이가 없거나 광산에 있는 모든 광물을 캘 때까지 과정을 반복하면 됩니다.
마인이 갖고 있는 곡괭이의 개수를 나타내는 정수 배열 picks
와 광물들의 순서를 나타내는 문자열 배열 minerals
가 매개변수로 주어질 때, 마인이 작업을 끝내기까지 필요한 최소한의 피로도를 return 하는 solution 함수를 완성해주세요.
picks
는 [dia, iron, stone]과 같은 구조로 이루어져 있습니다.minerals
의 길이 ≤ 50function solution(picks, minerals) {
let answer = 0;
const mineTotalCount = Math.ceil(minerals.length / 5);
const totalPicksCount = picks.reduce((a, b) => a + b);
const minedMinerals = [];
if (totalPicksCount === 0) {
return 0;
}
minerals = minerals.slice(0, totalPicksCount * 5);
for (let mineCount = 0; mineCount < mineTotalCount; mineCount++) {
const mineralObj = {
'diamond': 0,
'iron': 0,
'stone': 0,
};
minerals.splice(0, 5).map((mineral) => mineralObj[mineral]++);
minedMinerals.push(mineralObj);
}
minedMinerals.sort((a, b) => b.diamond - a.diamond || b.iron - a.iron || b.stone - a.stone);
minedMinerals.forEach(({diamond, iron, stone}) => {
if (picks[0] > 0) {
answer += diamond + iron + stone;
picks[0]--;
return;
}
if (picks[1] > 0) {
answer += diamond * 5 + iron + stone;
picks[1]--;
return;
}
if (picks[2] > 0) {
answer += diamond * 25 + iron * 5 + stone;
picks[2]--;
return;
}
});
return answer;
}
어떤 과학자가 발표한 논문 n
편 중, h
번 이상 인용된 논문이 h
편 이상이고 나머지 논문이 h
번 이하 인용되었다면 h
의 최댓값이 이 과학자의 H-Index입니다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations
가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.
function solution(citations) {
citations.sort((a,b) => b - a);
for (let i = 0; i < citations.length; i++) {
if (i >= citations[i]) {
return i;
}
}
return citations.length;
}
XYZ 마트는 일정한 금액을 지불하면 10일 동안 회원 자격을 부여합니다.
예를 들어, 정현이가 원하는 제품이 바나나 3개, 사과 2개, 쌀 2개, 돼지고기 2개, 냄비 1개이며, XYZ 마트에서 15일간 회원을 대상으로 할인하는 제품이 날짜 순서대로 치킨, 사과, 사과, 바나나, 쌀, 사과, 돼지고기, 바나나, 돼지고기, 쌀, 냄비, 바나나, 사과, 바나나인 경우에 대해 알아봅시다.
정현이가 원하는 제품을 나타내는 문자열 배열 want
와 정현이가 원하는 제품의 수량을 나타내는 정수 배열 number
, XYZ 마트에서 할인하는 제품을 나타내는 문자열 배열 discount
가 주어졌을 때, 회원등록시 정현이가 원하는 제품을 모두 할인 받을 수 있는 회원등록 날짜의 총 일수를 return 하는 solution 함수를 완성하시오. 가능한 날이 없으면 0을 return 합니다.
want
의 길이 = number
의 길이 ≤ 10number
의 원소 ≤ 10number[i]
는 want[i]
의 수량을 의미하며, number
의 원소의 합은 10입니다.discount
의 길이 ≤ 100,000want
와 discount
의 원소들은 알파벳 소문자로 이루어진 문자열입니다.want
의 원소의 길이, discount
의 원소의 길이 ≤ 12function solution(want, number, discount) {
let answer = 0;
const wantObj = {};
for (let i = 0; i < want.length; i++) {
wantObj[want[i]] = number[i];
}
for (let i = 0; i < discount.length; i++) {
const copiedWantObj = {...wantObj};
let buyableItemCount = 0;
let itemIndex = i;
while (itemIndex < i + 10) {
const item = discount[itemIndex];
if (!copiedWantObj[item]) {
break;
}
copiedWantObj[item]--;
if (copiedWantObj[item] === 0) {
buyableItemCount++;
}
itemIndex++;
}
if (buyableItemCount === want.length) {
answer++;
}
}
return answer;
}