[프로그래머스] LEVEL0 다항식 더하기 파이썬

그린·2023년 2월 17일
0

프로그래머스

목록 보기
7/28
post-thumbnail

[프로그래머스] LEVEL0 다항식 더하기


✔️문제

✅문제 설명

한 개 이상의 항의 합으로 이루어진 식을 다항식이라고 합니다. 다항식을 계산할 때는 동류항끼리 계산해 정리합니다. 덧셈으로 이루어진 다항식 polynomial이 매개변수로 주어질 때, 동류항끼리 더한 결괏값을 문자열로 return 하도록 solution 함수를 완성해보세요. 같은 식이라면 가장 짧은 수식을 return 합니다.

✅제한사항

  • 0 < polynomial에 있는 수 < 100
  • polynomial에 변수는 'x'만 존재합니다.
  • polynomial은 0부터 9까지의 정수, 공백, ‘x’, ‘+'로 이루어져 있습니다.
  • 항과 연산기호 사이에는 항상 공백이 존재합니다.
  • 공백은 연속되지 않으며 시작이나 끝에는 공백이 없습니다.
  • 하나의 항에서 변수가 숫자 앞에 오는 경우는 없습니다.
  • " + 3xx + + x7 + "와 같은 잘못된 입력은 주어지지 않습니다.
  • "012x + 001"처럼 0을 제외하고는 0으로 시작하는 수는 없습니다.
  • 문자와 숫자 사이의 곱하기는 생략합니다.
  • polynomial에는 일차 항과 상수항만 존재합니다.
  • 계수 1은 생략합니다.
  • 결괏값에 상수항은 마지막에 둡니다.
  • 0 < polynomial의 길이 < 50

✔️풀이

🙋‍♀️내 풀이

def solution(polynomial):
    answer = ''
    sum = 0
    num = 0
    polynomial = polynomial.replace(' ', '').split('+')
    for e in polynomial :
        if e[-1] == 'x':
            num += 1 if len(e) == 1 else int(e[:-1:])
        else :
            sum += int(e)
    answer = str(num)+'x'+(' + '+str(sum) if sum>0 else '')
    return answer

테스트 케이스 5~8번, 10번, 12번 실패로 나온 코드

  1. polynomial의 공백을 제거하고 + 연산자를 기준으로 배열에 담았다.
  2. 배열의 인수 마지막이 'x' 이면 계수를 num에 더해줬다.
    2-1. 상수항이라면 sum에 그 값을 더해줬다.
  3. 마지막으로 num(계수의 합),x,+연산자, 그리고 sum(상수항의 합)을 문자열로 리턴해줬다.

내가 처리해주지 않은 예외 사항은 바로 계수의 합이 1과 0인 경우였다.
1. 계수의 합이 0인 경우, 상수항 앞에 아무것도 추가해주지 않도록 수정하고
2. 계수의 합이 1인 경우, 계수를 생략하여 추가하도록 수정했다.


수정한 코드는 다음과 같다.
def solution(polynomial):
    answer = ''
    sum = 0
    num = 0
    polynomial = polynomial.replace(' ', '').split('+')
    for e in polynomial :
        if e[-1] == 'x':
            num += 1 if len(e) == 1 else int(e[:-1:])
        else :
            sum += int(e)
    if num>0:
        answer = (str(num) if num>1 else '')+'x'+(' + ' if sum>0 else '')
    answer += (str(sum) if sum>0 else '')
    return answer

🧐다른 사람의 풀이

def solution(polynomial):
    xnum = 0
    const = 0
    for c in polynomial.split(' + '):
        if c.isdigit():
            const+=int(c)
        else:
            xnum = xnum+1 if c=='x' else xnum+int(c[:-1])
    if xnum == 0:
        return str(const)
    elif xnum==1:
        return 'x + '+str(const) if const!=0 else 'x'
    else:
        return f'{xnum}x + {const}' if const!=0 else f'{xnum}x'

공백을 없애준 후 '+'를 기준으로 나눈 내 코드와 달리 한번에 ' + '로 나누어 주었다. 한 줄로 적으려고 하다 지저분해진 내 코드와 달리 깔끔하고 보기 편하다. 코드를 짧게 적으려고 한 줄로 적는 것을 고집하지 말고 보기에 깔끔한 코드로 작성해야겠다.


👍오늘의 배운 점

💡isalpha(), isdigit() 함수

isalpha() 함수는 문자열이 문자인지 아닌지를 True,False로 리턴해주고,
isdigit() 함수는 문자열이 숫자인지 아닌지를 True,False로 리턴해준다.

0개의 댓글