코로 넘어져도 헤딩만 하면 그만

JS 프로그래머스(입문) 풀이 정리 Day 3-4 본문

JavaScript/프로그래머스 문제풀이

JS 프로그래머스(입문) 풀이 정리 Day 3-4

꼬드리 2024. 7. 5. 11:51

 

 

💡오름차순, 내림차순 sort()로 정렬하기

function solution(array) {    
  const resortList = array.sort((a, b)=>a-b);
  const mid_num = Math.trunc(array.length / 2);
  const answer = resortList[mid_num];
  return answer;
}

어제 푼 문제에서 나온 Math.trunc()로 소수점 이하의 수를 버리는 방식을 취했다. floor을 썼어도 괜찮았을 것 같다.

sort()는 기본적으로 문자를 UTF-16 코드 유닛 값을 기준으로 정렬한다. 따라서 숫자 정렬을 제대로 하기 위해 커스터마이징이 필요하다. 이번에는 a-b를 사용해서 오름차순으로 정렬해주었다.

또한, sort()의 경우 원본 배열을 변경시키기 때문에 조심해야 한다. 복사를 해서 사용하는 편이 좋을 것 같다.

 

 

💡n보다 작은 홀수만 배열에 넣기

function solution(n) {
  const answer = [];
  let i = 1;

  while (i <= n) {
    if (i % 2 === 1) {
      answer.push(i);
    }
    i++;
  }
  return answer;
}

while과 if문을 사용해서 답을 도출했다. 

아래와 같이 깔끔하게 +=2를 사용하는 방법도 있다.

function solution(n) {
    var answer = [];

    for (let i = 1; i<=n; i+=2) answer.push(i)

    return answer;
}

 

 

💡 피자 나누기1(몫과 나머지)

function solution(n) {
  const needPizza = n / 7;
  let answer = 0;
  if (n % 7 === 0) {
    answer = needPizza;
  } else {
    answer = Math.floor(needPizza) + 1;
  }
  return answer;
}

일단 답은 풀었는데, Math.ceil을 사용하면 더 깔끔하게 작성할 수 있다. Math.floor가 소수점 아래를 버린다면 Math.ceil은 올림을 처리한다.

아니면 아래와 같이 삼항 연산자로 쓰는 법도 고려해볼 만하다. 

function solution(n) {
    return n % 7 === 0 ? n / 7 : Math.floor(n / 7) + 1;
}

 

💡 피자 나누기2(최대공약수와 최소공배수)

function gcd(a, b) {
    while (b !== 0) {
        const temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

function lcm(n, m) {
    return (n * m) / gcd(n, m);
}

function solution(n) {
    let answer = 0;
    if(n%6===0){
        answer =  n/6;
    } else {
        answer = lcm(n, 6)/6
    }
    return answer;
}

너무 원론적으로 풀었다는 느낌? 최대공약수와 최소공배수를 구하고 활용했다.

while문에 나머지가 없는 경우를 빠져나가는 조건으로 주고, 깔끔하게 쓴 코드가 있었다.

const solution = (n) => {
    let piece = 6

    while(true) {
        if (piece % n === 0) {
            break
        }
        piece += 6
    }

    return piece / 6
}

 

 


💡 배열의 평균값 구하기

function solution(numbers) {
  let sum = 0;
  for(let i=0;i<numbers.length;i++){
      sum += numbers[i];
  }
  let answer = sum/numbers.length;  
  return answer;
}

for문을 사용해서 풀었는데, reduce 고차함수를 사용하는 방법이 있었다.

reduce 쓸 생각은 못 했는데 응용에 좀더 관심을 기울여야겠다...

 

function solution(numbers){
	let answer = numbers.reduce((a,b)=>a+b, 0) / numbers.length;
    return answer;
}
Comments