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

윤인경·2023년 8월 3일
0

코딩테스트

목록 보기
21/38
post-thumbnail

문제 설명

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

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

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

제한 사항

  • 1 ≤ n, m ≤ 100

입출력 예

ineqeqnmresult
"<""="20501
">""!"41780

입출력 예 설명
입출력 예 #1

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

입출력 예 #2

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

내가 작성한 코드

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

코드 간단 소개

  • if - elif - else를 사용하여 풀이하였다.
  • 가장 먼저 ineq, eq값에 따라 조건을 모두 작성하여 4개로 나눈다.
    • ineq == ">" and eq == "="
    • ineq == ">" and eq == "!"
    • ineq == "<" and eq == "="
    • ineq == "<" and eq == "!"
  • 각 조건에 따라 >,=이면 >= 으로, >,!이면 >으로 n, m을 비교하여 참이면 1, 거짓이면 0을 answer에 저장하고 return한다.

다른 사람 풀이

def solution(ineq, eq, n, m):
    return int(eval(str(n)+ineq+eq.replace('!', '')+str(m)))
  • eval()안에 들어갈 문자열을 만든다.
  • 숫자 n, m을 문자열로 바꾸기 위해 str()을 사용해 변환한다.
  • ineq는 그대로 사용하기 때문에 그대로 +를 한다.
  • eq에서 =는 그대로 사용하지만 !는 사라지기 때문에 replace('!','')으로 !를 공백으로 바꾸어 +한다.
  • 따라서 str(n)+ineq+eq.replace('!', '')+str(m))를 예시
    • n = 2, ineq='>', eq='=', m = 3
      '2 >= 3'
    • n = 6, ineq='<', eq='!', m = 9
      '6 < 9'
  • eval()에서 위 문자열을 계산한다.
  • eval()에서 계산된 값을 int로 반환하여 return한다.

eval(expression)

매개변수로 expression(식)을 문자열로 받아서 실행한다.

# 파이썬 eval(expression) 예제
# 1. 문자열 덧셈
a = eval('"BlockDMask" + "blog"')
print(f"1. eval('\"BlockDMask\"' + '\" blog\"') : {a}")
# 2. 숫자 덧셈
b = eval("100 + 32")
print(f'2. eval("100 + 32") : {b}')
# 3. 내장 함수 abs
c = eval("abs(-56)")
print(f'3. eval("abs(-56)") : {c}')
# 4. 리스트 길이
d = eval("len([1,2,3,4])")
print(f'4. eval("len([1,2,3,4])") : {d}')
# 5. round 함수
e = eval("round(1.5)")
print(f'5. eval("round(1.5)") : {e}')
profile
코딩 공부 및 프로젝트 정리

0개의 댓글