2016년 / 달력계산
const solution = (a, b) => {
const month = [0,31,60,91,121,152,182,213,244,274,305,335];
// 1개월 일수 누적으로 더한 값. 너무 무식하게 계산한거같다.
const week = ["THU","FRI","SAT","SUN","MON","TUE","WED"];
// 순서대로 나머지 값이 0이면 THU, 1이면 FRI ...
return week[(month[a-1]+b) % 7];
};
// 알고리즘 공부하려고 new Date()메소드를 쓰지 않고 직접 계산했다.
자연수 뒤집어 배열로 만들기
const solution = (n) => {
const str = n.toString().split("").reverse();
// 자연수를 문자열로 변환 후 한글자씩 나누고 뒤집기.
return str.map(num => +num) ;
// 배열속 문자열을 map을 이용해 숫자형으로 바꿔줌.
};
완주하지 못한 선수 / [배열] - [배열] 한 값 리턴
const solution = (participant, completion) => {
const p = participant.sort();
const c = participant.sort();
// 두 배열 이름순서대로 배열시킴.
for(let i = 0; i < p.length; i++){
if(p[i] !== c[i]) return p[i];
// 배열 사이에 요소를 탐색하면서 c에 없는 값(탈락자)을 리턴
}
};
탈락자가 2명이상 나온다면 이코드는 망함.
(코테 조건은 일단 무조건 한명의 탈락자만 나온다고 함.)
여기서 시간복잡도라는걸 배움.
알고리즘이 최악일때의 경우를 판단하면 평균과 가까운 성능으로 예측하기 쉽기때문 최악의 경우를 표기한 빅오 표기법을 사용.
위 경우는 하나의 루프를 사용해 단일 요소 집합을 반복하는 경우라 O(n)에 해당.
컬렉션의 절반 이상 을 반복 하는 경우 : O (n / 2) -> O (n)
두 개의 다른 루프를 사용하여 두 개의 개별 콜렉션을 반복 할 경우 : O (n + m) -> O (n)
두 개의 중첩 루프를 사용하여 단일 컬렉션을 반복하는 경우 : O (n²)
두 개의 중첩 루프를 사용하여 두 개의 다른 콜렉션을 반복 할 경우 : O (n * m) -> O (n²)
컬렉션 정렬을 사용하는 경우 : O(n*log(n))