1월 31일 여정 23일차이다.
오늘은 내가 풀은 알고리즘 모의고사에 대해 코드 리뷰를 하고자 한다.
문제는 항해 1일 차 날짜를 입력하면 98일 이후 이후 항해를 수료하게 되는 날짜를 계산해주는 알고리즘을 만든는 것이다.
function solution(a, b) {
let dateStr = '2016-' + a + '-' + b;
let date = new Date(dateStr);
let after = date.setDate(date.getDate() + 98);
let graduate = new Date(after);
return graduate.getMonth() + 1 + '월' + graduate.getDate() + '일';
}
solution(1, 18);
날짜의 형식을 String으로 바꾸어 주었다.
new Date()라는 것을 이용하여 날짜로 바꾸어주었다.
setDate()를 이용하여 일자에 98일을 더하였다.
밀리세컨드로 반환 된 것을 다시 날짜 형식으로 변환하였다.
문자열 s에 공백으로 구분된 숫자들이 저장되어있다. str에 나타나는 숫자 중 소수의 최대값과
소수가 아닌 최소값을 찾아 이를 '(최소값)(최대값)'형태로 반환해준다.
예를 들어서 '2 3 4 5'이면 '4 5'가 반환된다.
function solution(num) {
let arr = num.split(' ');
let prime = [];
let notPrime = [];
const isPrime = (n) => {
for (let i = 2; i < n; i++) {
if (n % i === 0) {
return false;
}
}
return true;
};
arr.forEach((a) => {
if (isPrime(a)) prime.push(a);
else notPrime.push(a);
});
prime.sort((a, b) => b - a);
notPrime.sort((b, a) => a - b);
return `${notPrime[0] ? notPrime[0] : ''} ${prime[0] ? prime[0] : ''}`;
}
console.log(solution('2 3 4 5'));
num을 공백 기준으로 쪼갠다.
소수가 아닌 배열, 소수만 들어가는 배열 2개를 만든다.
forEach를 사용하여 소수를 판별함수(isPrime())하여 각 배열에 넣는다.
sort로 오름차순, 내림차순으로 정렬한다.
배열 2개의 0번째 값을 문자열로 반환한다.