본문 바로가기
  • 2025
문제풀기/프로그래머스 문풀

[프로그래머스] 비교 연산

by soonrang 2023. 8. 15.

문제


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

두 수가 n과 m이라면

">", "=" : n >= m
"<", "=" : n <= m
">", "!" : n > m
"<", "!" : n < m

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

 

문제접근


✅ 해당 문제를 처음 보았을 때 나는 최대한 내 손을 덜 쓰고 싶었다. 

&& 이나 || 등을 쓸 수도 있지만 ineq와 eq를 합쳐버리면 더 편할거라 생각했다. 

compareNum이라는 변수를 추가하고 equals를 이용하여 문자열을 비교해준다. 

처음엔 뭣모르고 compareNum= ">=" 를 썼는데 문자열은 이렇게 비교하면 안된다고 한다. 

 

문자열 비교 문법


___.equals("   ")

✅ 다음과 같은 문법을 사용해줘야한다. 해당 값이 null 값인 경우 NullPointerException 이 발생한다. 예외 처리가 싫다면 Objects.equals()을 사용하면 된다. 대소문자 구별없이 문자 자체로만 비교하고 싶으면 equalsIgnoreCase()을 사용하자!

 

 

내가 제출한 답


class Solution {
    public int solution(String ineq, String eq, int n, int m) {
        int answer = 0;
        
        String compareNum = ineq + eq;
        
        if (compareNum.equals(">=")) {
            answer = n >= m ? 1 : 0;
        } else if (compareNum.equals("<=")) {
            answer = n <= m ? 1 : 0;
        } else if (compareNum.equals(">!")) {
            answer = n > m ? 1 : 0;
        } else if (compareNum.equals("<!")) {
            answer = n < m ? 1 : 0;
        }
        
        return answer;
    }
}

 

여기서 코드를 더 줄일 수 있다. 

answer을 boolean타입으로 선언하면 삼항연산자를 한번만 적어줘도 된다. 

 

class Solution {
    public int solution(String ineq, String eq, int n, int m) {
        Boolean answer = false; // 초기값은 false
        String compareNum = ineq + eq; // 부등호와 등호를 결합하여 비교 문자열 생성
        
        if (compareNum.equals(">=")) {
            answer = n >= m; // n이 m보다 크거나 같으면 true
        } else if (compareNum.equals("<=")) {
            answer = n <= m; // n이 m보다 작거나 같으면 true
        } else if (compareNum.equals(">!")) {
            answer = n > m ; // n이 m보다 크면 true
        } else {
            answer = n < m; // n이 m보다 작으면 true
        } 
        
        // answer 값이 true이면 1 반환, false이면 0 반환
        return answer ? 1 : 0;
    }
}

 

요즘은 학원에서 파이썬을 배우고 있다. 프로그래머스의 장점은 쉽게 다른 사람들의 풀이를 볼 수 있다는 점이다. 

파이썬 공부에 많은 시간을 투자하고 싶지 않지만 깔짝거리고 싶을 때 파이썬 정답 코드를 본다.

어느정도 코드를 읽을 수 있으니까 ! 도움이 된다 ! 

 

 

파이썬 답안


def solution(ineq, eq, n, m):
    return int(eval(str(n)+ineq+eq.replace('!', '')+str(m)))

 

역시 파이썬은 짧은 코드로 해결 가능하다.