Software Engineering/Algorithm Test

Day4_코딩 기초 트레이닝_프로그래머스

Nomad Kim 2023. 7. 15. 06:54

홀짝에 따라 다른 값 반환하기

Description
양의 정수 n이 매개변수로 주어질 때, 
n이 홀수라면 n 이하의 홀수인 모든 양의 정수의 합을 return 하고 
n이 짝수라면 n 이하의 짝수인 모든 양의 정수의 제곱의 합을 return 하는
solution 함수를 작성해 주세요.

 

My answer was

function solution(n) {
    const isOdd = !!(n % 2);    
    let result = 0;
    
    if(isOdd) {            
        for (let i = 1; i < n+1; i = i + 2) {
            result += i
        }        
    } else {
        for (let i = 2; i < n+1; i = i + 2) {
            result += Math.pow(i, 2)  
        }        
    }
    return result;
}

Best answer was

function solution(n) {
    if(n%2===1)
      return  (n+1)/2*((n + 1)/2) ;
    else
      return   n*(n+1)*(n+2)/6;
}
// n이 짝수일 때는 등차수열의 합 공식을 적용하였고, 
// n이 홀수일 때는 자연수 거듭 제곱의 합을 구하는 공식을 적용한 것으로 보입니다. => 확인필요!

 

조건 문자열

Description
문자열에 따라 다음과 같이 두 수의 크기를 비교하려고 합니다.
두 수가 n과 m이라면
  ">", "=" : n >= m
  "<", "=" : n <= m
  ">", "!" : n > m
  "<", "!" : n < m
두 문자열 ineq와 eq가 주어집니다.
ineq는 "<"와 ">"중 하나고, eq는 "="와 "!"중 하나입니다.
그리고 두 정수 n과 m이 주어질 때, n과 m이 ineq와 eq의 조건에 맞으면 1을
아니면 0을 return하도록 solution 함수를 완성해주세요.

 

My answer was

function solution(ineq, eq, n, m) {
    if(ineq === ">" && eq === "=") return +(n >= m)
    else if(ineq === "<" && eq === "=") return +(n <= m)
    else if(ineq === ">" && eq === "!") return +(n > m)
    else if(ineq === "<" && eq === "!") return +(n < m)
}

Best answer was

const operations = {
  '>=': (n, m) => n >= m,
  '<=': (n, m) => n <= m,
  '>!': (n, m) => n > m,
  '<!': (n, m) => n < m,
};

function solution(ineq, eq, n, m) {
  const op = operations[ineq + eq];
  return Number(op(n, m));
}

가독성이 매우 좋아졌다.