내일배움캠프 Node.js 본캠프 29일차

김선우·2024년 9월 13일
post-thumbnail

알고리즘 코드카타 이후 팀 프로젝트 내용 발제가 있었다.
이후 팀원들과 상의하며 팀 노션 작성, 역할 분담, API 명세서와 ERD 제작 등 개발 전 필요 요소들에 대한 것들을 팀 회의를 하면서 정했다.
아직 강의를 다 듣지 못해서 팀원들의 발목을 잡아버릴 것만 같으니 주말과 추석 연휴를 이용해 강의를 마무리 해야겠다.

알고리즘 문제 풀어보기

명예의 전당

문제 설명

"명예의 전당"이라는 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 함수를 완성해주세요.

제한사항

3 ≤ k ≤ 100
7 ≤ score의 길이 ≤ 1,000
0 ≤ score[i] ≤ 2,000

풀이 코드

function solution(k, score) {
  var answer = [];
  var nums = [];
  score.forEach((num) => {
    nums.push(num);
    nums.sort((a, b) => b - a).splice(k);
    answer.push(Math.min.apply(null, nums));
  });
  return answer;
}

풀이 과정

개수값 k를 담을 배열 nums를 만들어준 후 score에 담긴 값을 num에 순서대로 넣어줌.
이후 num 값을 내림차순으로 정렬하고 splice를 통해 인덱스값 k 이후 값을 전부 삭제한다. nums의 최소값을 answer에 넣어주고 이 answer값을 return한다.

2016년

문제 설명

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"를 반환하세요.

제한 조건

2016년은 윤년입니다.
2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)

풀이 코드

function solution(a, b) {
  var answer = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
  var date = new Date("2016-" + a + "-" + b);
  return answer[date.getDay()];
}

풀이 과정

answer을 요일에 해당하는 값을 넣어준 배열로 만들어준다.
date에 2016년-a월-b일을 넣어 주고 getDay()를 통해 현재 요일에 해당하는 숫자를 반환받아 그 값에 해당하는 요일을 출력.

학습 내용

JS날짜표현

  1. 연도(year) : 1900년(00) ~ 1999년(99)
  2. 월(month) : 1월(0) ~ 12월(11)
  3. 일(day) : 1일(1) ~ 31일(31)
  4. 시(hours) : 0시(0) ~ 23시(23)
  5. 분(minutes) : 0분(0) ~ 59분(59)
  6. 초(seconds) : 0초(0) ~ 59초(59)

new Date()

인수를 전달하지 않으면 현재 날짜와 시간을 가지는 인스턴트를 반환.
new Date(dateString)
인수로 날짜와 시간을 나타내는 문자열을 전달하면 지정된 날짜와 시간을 가지는 인스턴스를 반환한다.
이때 인수로 전달한 문자열은 Date.parse 메소드에 의해 해석 가능한 형식이어야 한다.
ex)

let date = new Date('May 16, 2019 17:22:10');
console.log(date); // Thu May 16 2019 17:22:10 GMT+0900 (한국 표준시)

date = new Date('2019/05/16/17:22:10');
console.log(date); // Thu May 16 2019 17:22:10 GMT+0900 (한국 표준시)

0개의 댓글