6/30 codewars문제

samuel Jo·2023년 6월 30일
0

codewars

목록 보기
28/46

1. 첫번째 문제 oddOrEven (7kyu)

function oddOrEven(array){
    return array.reduce((a,b)=>a+b,0) % 2===0 ? "even": "odd";
}
//reduce 함수를 통해 배열의 합을 더해서 %2를 했을때 나머지가 0이면 even 아니면 odd를 반환.

간단한문제.


2.Sum of Numbers(7kyu)

/**가우스의 합공식으로 계산하면 간단  */
function GetSum(a,b){
    // 1+...+n=( n* (n + 1) ) / 2
    return (Math.abs(a-b)+1) * Math.abs(a+b) / 2;
}

console.log(GetSum(100,1));

3. Calculate BMI (8kyu)

function bmi(weight, height) {
    let bmi=weight/(height**2);
    if(bmi<= 18.5){
      return "Underweight";
    }else if(bmi<= 25){
      return  "Normal"
    }else if(bmi <=30.0){
      return "Overweight";
    }else{
      return "Obese";
    }
    
  }
  

이건 요즘 몸이 무거워졌다 싶었는데 눈에 딱 띄여서 자기반성겸 넣었다...


4.Take a Ten Minutes Walk


/**첫번째로 생각한 방법 */

function isValidWalk(walk) {
  function Count(val) {
    // Count 라는 함수를 만들어 filter 메서드를 통해 값이 같은걸 세어 반환.
    return walk.filter((a) => val === a).length;
  }
  // walk.length가 10이어야 하고,(10분걷기니까) Count 함수의 n과 s의 갯수가 같아야함, e와w의 갯수가 같아야함.
  return (
    walk.length === 10 && Count("n") === Count("s") && Count("w") === Count("e")
  );
}

생각보다 첫번째 생각한 방법보단 밑방법이 더 깔끔한 느낌... 똑같은 시간복잡도(O(n))을 갖기때문에 비슷할거 같긴하다.


/**풀다보니까 너무 가독성이 떨어지는거같아서 어떤방법이 있나 고민해봄. */

function isValidWalk(walk) {
  let x = 0;
  let y = 0;
  for (let direction of walk) {
    switch (direction) {
      case "n":
        y += 1;
      case "s":
        y -= 1;
      case "w":
        x += 1;
      case "e":
        x -= 1;
        break;
    }
  }
  // 총 이동거리가 10이어야 함(소요시간10분) 시작지점으로 돌아왔는지 확인
  return walk.length ===10 && x===0 && y===0;
}

// for문으로 순회하면서 switch문으로 가독성을 늘림.

7/1일 할일은
unfinished 한 문제들이 15개가 있는데 그중 3개라도 끝내볼 예정.(4kyu 위주로.)

profile
step by step

0개의 댓글