Algorithm
function solution(progresses, speeds) {
let answer = [];
let success = progresses.map((v,i)=>{
return Math.ceil((100-v)/speeds[i])
})
let compare = success[0]
let dep = 1
for(let i=1; i<=success.length-1;i++) {
if(compare>=success[i]){
dep++
}else{
compare = success[i]
answer.push(dep)
dep = 1
}
}
answer.push(dep)
return answer;
}
map을 통해 배열로 받고 그 배열을 반복문을 이용해 쭉 비교한다.compare에 넣고 첫번째 개발 완성이 될 날짜보다 작으면 포함 아니면 불포함으로 진행해서 한번에 몇개씩 완성되는지 파악한다클린코드
// AND
true && true && '도달' // '도달'
true && false && '도달X' // false
// OR
false || false || '도달' // '도달'
true || true || '도달 X' // true
function fetchData(){
if(state.data){
return state.data;
}else{
return 'Fetching...'
}
}
얼핏 보면 삼항 연산자로 처리할 수 있게 보이지만 or연산자로도 가능하다
state.data' || 'Fetching...' 단축평가가 된 상황이다
function favoriteDog(someDog){
let favoriteDog;
if(someDog){
favoriteDog = dog;
} else {
favoriteDog = '냐옹';
}
return `${favoriteDog}입니다`
}
favoriteDog() // 냐옹
favoriteDog('포메') // 포메입니다
해당 코드도 return (someDog || '냐옹') + '입니다';로 확 단축평가가 될 수 있다
이유는 someDog가 있다면 true기 때문에 or연산자의 뒷부분은 확인하지 않고 바로 출력이 되고 someDog가 없다면 undeifined로 falsy가 되기에or연산자가 뒤로 가며 true값을 찾는데 '냐옹'이 truty판정이 되어 출력되기 때문이다
파이프 라인처럼 흐른다기보단 else가 동작하고 if가 동작한다 생각하며 행동하자. 조건이 너무 늘어지게 될 경우 if조건속이 너무 늘어나지 않게 조절하고 아니면 switch..case문을 생각해보자.
else도 단축평가로 간단하게 진행될 수도 있고 return을 사용해서 else를 붙이지 않고 사용해도 충분하다
// age가 20미만시 report를 실행시켜라
function getHelloCustomer(user){
if(user.age <20) {
report(user);
} else{
return '안녕하세요';
}
}
위 처럼 함수 하나에 한가지 일이 아닌report라는 특수 함수도 실행하고 '안녕하세요'라는 문구도 출력해야 하는 함수일 경우 else를 무턱대고 사용할 경우 if else에 엮여서 아래 return이 실행되지 않을 수 있다.