7 - 2 TIL

hoin_lee·2023년 7월 3일
0

TIL

목록 보기
197/236

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;
}
  • 기능 개발 완성 진행도가 100이니 100에서 현재 완성도를 빼고 하루마다 완성되는 퍼센트로 나누면 각각 며칠부터 완성되는지가 나온다
  • 해당 완성 진행 시간을 map을 통해 배열로 받고 그 배열을 반복문을 이용해 쭉 비교한다.
  • 맨처음 비교할 0번 인덱스를 compare에 넣고 첫번째 개발 완성이 될 날짜보다 작으면 포함 아니면 불포함으로 진행해서 한번에 몇개씩 완성되는지 파악한다

클린코드

short-circuit, evaluation

// 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가 없다면 undeifinedfalsy가 되기에or연산자가 뒤로 가며 true값을 찾는데 '냐옹'truty판정이 되어 출력되기 때문이다

else if & else 피하기

파이프 라인처럼 흐른다기보단 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이 실행되지 않을 수 있다.

profile
https://mo-i-programmers.tistory.com/

0개의 댓글