[JavaScript] 조건 문자열 _객체 리터럴(object literal) 개념

Yeojin·2024년 2월 14일

코딩테스트 연습 > 코딩 기초 트레이닝

✅ 문제 설명

문자열에 따라 다음과 같이 두 수의 크기를 비교하려고 합니다.

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


✅ 제한사항

  • 1 ≤ n, m ≤ 100

✅ 입출력 예

ineq eq n m result
"<" "=" 20 50 1
"<" "!" 41 78 0

✅ 풀이

내가 작성한 코드는... 정직한 if문을 활용하여 굉장히 직관적이지만, 가독성이 떨어진다는 단점이 있다.
아래 다른 사람의 풀이를 보고, 자바스크립트의 객체(Object) 개념을 지속적으로 복습해야 겠다고 다짐할 수 있었다😅
알고리즘 문제풀이 뿐만 아니라, 실무에서도 유용하게 사용할 수 있는 중요한 개념이라고 생각한다.


// 나의 풀이
const solution = (ineq, eq, n, m) => {
    let answer = 0;
    
    if(ineq === ">" && eq === "=") {
        n >= m ? answer = 1 : answer = 0
    
    } else if(ineq === "<" && eq === "=") {
        n <= m ? answer = 1 : answer = 0
        
    } else if(ineq === ">" && eq === "!") {
        n > m ? answer = 1 : answer = 0
        
    } else {
        n < m ? answer = 1 : answer = 0
        
    }
    
    return answer;
}


// 다른 사람의 풀이 참고
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));
}

객체 key에 계산식 및 템플릿 리터럴 사용하기
객체를 만들 때 객체 리터럴 안의 프로퍼티 키가 대괄호로 둘러싸여 있는 경우, 이를 계산된 프로퍼티(cumputed property)라고 부른다.


let name = 'server name'
let one = 1
let two = 2

// [name]은 프로퍼티 이름을 변수 name에서 가져오겠다는 것을 의미
let server = {
  [name]: 'ES6',
  [one + two]: 'one two',
  [`${one} server`]: 9999,
}

console.log(server) // { 3: 'one two', 'server name': 'ES6', '1 server': 9999 }

// 사용자가 프롬프트 대화상자에 `apple`을 입력했다면 `bag`에는 `{apple: 5}가 할당되었을 것
let fruit = prompt("어떤 과일을 구매하시겠습니까?", "apple");

let bag = {
  [fruit]: 5, // 변수 fruit에서 프로퍼티 이름을 동적으로 받아 오기
};

alert( bag.apple ); // fruit에 "apple"이 할당되었다면, 5가 출력됨

// switch문을 객체 리터럴로 구현
let fruit = 'strawberries';

switch (fruit) {
  case 'apples':
    console.log('Apples');
    break;
  case 'oranges':
    console.log('Oranges');
    break;
  default:
    console.log('Unknown fruit');
}
// Logs: 'Unknown fruit'

const logFruit = {
  'apples': () => console.log('Apples'),
  'oranges': () => console.log('Oranges'),
  'default': () => console.log('Unknown fruit')
};

(logFruit[fruit] || logFruit['default'])(); // Logs: 'Unknown fruit'

참고 블로그
모던 JavaScript 튜토리얼 : 객체
자바스크립트 객체 리터럴을 이용한 스위치문 구현
Number()와 parseInt()의 차이

profile
"Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better."

0개의 댓글