문제를 열심히 풀던 상빈이는 일반화된 콜라 문제를 생각했습니다. 이 문제는 빈 병a개를 가져다주면 콜라b병을 주는 마트가 있을 때, 빈 병n개를 가져다주면 몇 병을 받을 수 있는지 계산하는 문제입니다. 기존 콜라 문제와 마찬가지로, 보유 중인 빈 병이a개 미만이면, 추가적으로 빈 병을 받을 순 없습니다. 상빈이는 열심히 고심했지만, 일반화된 콜라 문제의 답을 찾을 수 없었습니다. 상빈이를 도와, 일반화된 콜라 문제를 해결하는 프로그램을 만들어 주세요.
콜라를 받기 위해 마트에 주어야 하는 병 수a, 빈 병 a개를 가져다 주면 마트가 주는 콜라 병 수b, 상빈이가 가지고 있는 빈 병의 개수n이 매개변수로 주어집니다. 상빈이가 받을 수 있는 콜라의 병 수를 return 하도록 solution 함수를 작성해주세요.
나의 답
functionsolution(a, b, n) {
letgotBottles=0;
letemptyBottles=n;
while (emptyBottles>=a) {
constnewBottles=Math.floor(emptyBottles/a) *b;
gotBottles+=newBottles;
emptyBottles= (emptyBottles%a) +newBottles;
}
returngotBottles
}
혼자서 문제 풀이 실패.
답에 거의 가까웠지만... 계속 생각해도 다른 답이 나와서 포기하고 gpt의 힘을 빌렸다.
while문을 사용하여 빈병의 갯수를 계속 업데이트해주면서 계산을 반복하는 로직이다.
다시 풀어볼 필요가 있을 듯 하다.
문제 2
"명예의 전당"이라는 TV 프로그램에서는 매일 1명의 가수가 노래를 부르고, 시청자들의 문자 투표수로 가수에게 점수를 부여합니다. 매일 출연한 가수의 점수가 지금까지 출연 가수들의 점수 중 상위 k번째 이내이면 해당 가수의 점수를 명예의 전당이라는 목록에 올려 기념합니다.
즉 프로그램 시작 이후 초기에 k일까지는 모든 출연 가수의 점수가 명예의 전당에 오르게 됩니다. k일 다음부터는 출연 가수의 점수가 기존의 명예의 전당 목록의 k번째 순위의 가수 점수보다 더 높으면, 출연 가수의 점수가 명예의 전당에 오르게 되고 기존의 k번째 순위의 점수는 명예의 전당에서 내려오게 됩니다.
이 프로그램에서는 매일 "명예의 전당"의 최하위 점수를 발표합니다. 예를 들어,k= 3이고, 7일 동안 진행된 가수의 점수가 [10, 100, 20, 150, 1, 100, 200]이라면, 명예의 전당에서 발표된 점수는 아래의 그림과 같이 [10, 10, 10, 20, 20, 100, 100]입니다.
명예의 전당 목록의 점수의 개수k, 1일부터 마지막 날까지 출연한 가수들의 점수인score가 주어졌을 때, 매일 발표된 명예의 전당의 최하위 점수를 return하는 solution 함수를 완성해주세요.
나의 답
functionsolution(k, score) {
constanswer= [];
lethallOfFame= [];
score.forEach((scores) => {
hallOfFame.push(scores);
hallOfFame.sort((a, b) =>a-b);
if (hallOfFame.length>k) {
hallOfFame.shift();
}
answer.push(hallOfFame[0]);
});
returnanswer
}
내 생각에, 이보다 더 완벽한 코드는 없다.
문제는 꽤 복잡해보이는데, 10분만에 vscode의 도움 받지 않고 풀었다. 꽤 쉬운 문제였다.
문제 3
2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각SUN,MON,TUE,WED,THU,FRI,SAT입니다.
예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요.
나의 답
functionsolution(a, b) {
letanswer="";
letdates= {
JAN:31,
FEB:29,
MAR:31,
APR:30,
MAY:31,
JUN:30,
JUL:31,
AUG:31,
SEP:30,
OCT:31,
NOV:30,
DEC:31,
};
lettime=0;
for (leti=0; i<a-1; i++) {
time+=Object.values(dates)[i];
}
time+=b;
if (time%7===1) {
answer="FRI";
}
if (time%7===2) {
answer="SAT";
}
if (time%7===3) {
answer="SUN";
}
if (time%7===4) {
answer="MON";
}
if (time%7===5) {
answer="TUE";
}
if (time%7===6) {
answer="WED";
}
if (time%7===0) {
answer="THU";
}
returnanswer
}
solution(5, 24);
객체로 변환해줄 필요가 지금 생각해보니까 굳이 있었을까 싶다. 답은 구했으니 뭐 장땡일 지도.