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
이 실행되지 않을 수 있다.