[js] 조건 문자 (lv.0, 정답률 80%)

sookyoung.k·2024년 4월 17일
0
post-thumbnail

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

  • 두 수가 n과 m이라면
    - ">", "=" : n >= m
    - "<", "=" : n <= m
    - ">", "!" : n > m
    - "<", "!" : n < m

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

제한 사항

  • 1 ≤ n, m ≤ 100

😵‍💫 나의 풀이

function solution(ineq, eq, n, m) {
    n = parseInt(n);
    m = parseInt(m);
    const condition = ineq + eq;
    
    switch (condition) {
        case '>!':
            return n > m ? 1 : 0;
        case '<=':
            return n <= m ? 1 : 0;
        case '>=':
            return n >= m ? 1 : 0;
        case '<!':
            return n < m ? 1 : 0;
        default:
            return 0;
    }
}

최대한 중복되는 조건을 제외하는 것이 중요한 문제라고 생각했다. 그거 생각하는게 조금 어려웠다...

n, m을 숫자로 바꾸고, 연산자를 더한 다음 switch문으로 케이스를 돌렸다.
그렇게 해서 각각의 조건에서 1이 나올 수 있는 경우만 크게 뽑아내고, 나머지는 다 0이 나올테니 삼항 연산자를 사용해서 풀었다.
코드만 보면 간단하게 푼 것 같은데 졸려서 더 그런가 조건 소거해나가는 것이 조금 헷갈리고 어려웠다.

🫨 다른 풀이 1

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));
}

천잰가?

operations라는 상수는 비교연산자를 키로 가지며, 비교 함수를 값으로 갖는 객체다.
→ '>=' 연산자에 대한 함수는 두 개의 숫자를 받아서 첫 번째 숫자가 두 번째 숫자보다 크거나 같은지 반환한다. (반복)

solution 함수에서는 네 개의 인자를 받는다. 여기에서 ineqeq를 조합하여 적절한 비교 함수를 선택하고, 이 함수를 사용해 nm을 비교한 결과를 숫자로 반환한다.

아예 비교 연산자를 상수로 만들어 값을 비교하고 반환하는 방식은 상상도 못했다! ㄴㅇㄱ

🫢 다른 풀이 2

function solution(ineq, eq, n, m) {
    if (eq === '=' && n === m) return 1
    if (ineq === '<' && n < m) return 1
    if (ineq === '>' && n > m) return 1
    return 0
}

여기도 천잰가?

eq 값에 = 가 들어가고 n===m일 경우 무조건 참이다.
이런 식으로 조건을 소거해 가는데 오... 훨씬 더 효율적인 사고방식이라는 느낌이 들었다. 접근 방식이 비슷한데 결국 나는 이런 식으로 더 효율적인 방식을 찾지 못한 것... 천재다 ㄷㄷ

profile
영차영차 😎

0개의 댓글