프로그래머스/코딩문제

[프로그래머스] Lv.0 조건 문자열

쟌문 2023. 10. 19. 16:32
반응형

문제 바로가기

🔖 문제 설명 

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

 

  • 두 수가 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 ≤ nm ≤ 100

 


📋 입출력 예

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

 

 


🔖 입출력 예 설명

입출력 예 #1 

 

  • 20 <= 50은 참이기 때문에 1을 return합니다. 

 

입출력 예 #2 

 

  • 41 > 78은 거짓이기 때문에 0을 return합니다.

 

 


🧾 기본 제공 코드

function solution(ineq, eq, n, m) {
    var answer = 0;
    return answer;
}
 
 
 

🗳️ 직접 풀이한 코드

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

처음 문제를 확인했을 때 가볍게 생각했다.

'전달된 매개변수의 값을 기반으로 조건문을 표현하면 되겠지'

라고 간단하게 생각했다.

 

하지만 수차례 테스트 해보면서 간단했던 생각은 금세 달라졌다.

 

위 풀이 과정대로 전달된 부등호의 값에 따라

조건이 일치하는 경우 return 해야할 삼항연산자 조건식대로 표현 가능한데,

난항을 겪기 전까지는 그런 생각을 하지 못했다.

 

단순하게 매개변수로 전달된 문자열 부등호를 비교연산자로 변환하여 표현이 가능한가?

라는 생각에 꽂혀 그렇게 할 수 있는지를 계속 확인해봤다.

 

하지만 잘못된 접근 방식과 생각이었고, 몇 번의 난항을 겪은 후 해결할 수 있었다.

( 사람이 폭 넓게 생각하지 못하고 하나에 꽂힌다는게 얼마나 사람을 우물 안 개구리로 만드는지를 다시 한 번 체감할 수 있었다.. 😥 )

 

문제를 해결하고 정상 동작되어서 기뻤다.

다만 아쉬웠던 점이 있었다.

전혀 효율적인 코드라는 생각이 들지 않았다.

조건에 충실한 코드이기는 하나 효율적인 측면과는 동떨어진 코드라는 생각이 들었다.

그래서 더욱 효율적인 코드는 어떤 코드들이 있을까 하고 다른 사람들이 풀이한 코드를 확인해봤다.

 

 


🗳️ 다른 사람이 풀이한 코드

1)

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
}

 

2)

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

1)번 풀이방법도 1이라는 값이 반환될 수 있는 경우의 수를 핵심적으로 추려 표현한

가독성에 좋고 직관적이어서 훌륭한 코드라고 생각했지만,

 

2)번 풀이방법은 보자마자 정말 기발하다고 느꼈다.

객체의 key값으로 연산자를, value로 function을 생성해

전달된 매개변수 조건에 따라 true 또는 false가 반환되게 하여

표현했다는게 너무나 놀라웠다.

 

 


💬 마치며

효율적이고 참신한 코드로 문제를 해결하는 사람들을 보면

역시나 잘하는 사람은 많구나 하는 생각이 든다.

그러면서 '여전히 많이 부족하구나~' 하는 생각도 든다.

 

하지만 그 과정 속에서 느끼는 바가 있다.

 

직접 문제를 풀이하면서 한 단계 성장한다는 느낌이 들고,

더 나아가 내가 몰랐던..

다른 사람들이 풀이한 방법을 참고하면서 배우고 익히는 과정 또한

내 경험치로 흡수하면서 내가 한 단계 성장할 수 있는 과정들이라고 느껴져서 그게 참 즐겁고 좋다.

꾸준히 해야겠다.

 

 


🔸 작성된 본문 내용 중 미흡한 부분이 있을 수 있습니다.
🔸 고칠 부분이나 추가되면 좋을 내용 댓글로 남겨주시면 완성도 높은 글을 만들어가는 데에 큰 힘이 됩니다. ☺️

 

반응형