본문 바로가기
프로그래밍/알고리즘

간단한 문제 코드길이 점점 줄여나가기

by 숙님 2023. 7. 14.
728x90

문제 설명

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

문자열 ineq eq 주어집니다. ineq "<" ">" 하나고, eq "=" "!" 하나입니다.

그리고 정수 n m 주어질 , n m ineq eq 조건에 맞으면 1 아니면 0 return 하도록 solution 함수를 완성해 주세요.

 

첫 번째 풀이 

def solution(ineq, eq, n, m):
    answer = 0
    if ineq== '>' and eq == '=':
        if n>=m:
            return 1 
        else:
            return 0 
    if ineq== '<' and eq == '=':
        if n<=m:
            return 1 
        else:
            return 0 
    if ineq== '>' and eq == '!':
        if n>m:
            return 1 
        else:
            return 0 
    if ineq== '<' and eq == '!':
        if n<m:
            return 1 
        else:
            return 0

모든 경우의 수를 적어서 하나하나 작성했다 

 

두 번째 풀이 

def solution(ineq, eq, n, m):
    if ineq == '<' and eq == '=' and n <= m:
        return 1
    elif ineq == '>' and eq == '=' and n >= m:
        return 1
    elif ineq == '>' and eq == '!' and n > m:
        return 1
    elif ineq == '<' and eq == '!' and n < m:
        return 1
    else:
        return 0

ineq, eq, n, m 간의 조건식을 한 줄씩 적어서 코드의 길이를 줄였다 

def solution(ineq, eq, n, m):
    if ineq == '<' and eq == '=' and n <= m: return 1
    elif ineq == '>' and eq == '=' and n >= m: return 1
    elif ineq == '>' and eq == '!' and n > m: return 1
    elif ineq == '<' and eq == '!' and n < m: return 1
    else: return 0

이렇게 쓰는 사람도 많은데 코드 길이는 짧아도 가독성은 위에 코드가 더 좋은 것 같다 

 

세 번째 풀이 

def solution(ineq, eq, n, m):
    return 1 if (ineq == '<' and eq == '=' and n <= m) else \
           1 if (ineq == '>' and eq == '=' and n >= m) else \
           1 if (ineq == '>' and eq == '!' and n > m) else \
           1 if (ineq == '<' and eq == '!' and n < m) else \
           0

삼항연산자로 풀어보고 싶어서 무리수를 두었다 

 

네 번째 풀이 

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

이건 다른 사람의 답변을 보고 참고한 코드이다 

replace와 eval을 사용한 것이 인상 깊다 

이제 문제를 보면 손이 나가기보다는 어떻게 간단히 풀 수 있을지를 고민하는 습관이 생기는 것 같다 

댓글