백준 문제 풀이 - 다항 함수의 적분 17214번

Joonyeol Sim👨‍🎓·2022년 1월 4일
0

백준문제풀이

목록 보기
52/128

📜 문제 이해하기

다항식(polynomial)은 문자의 거듭제곱의 상수 배들의 합을 표현하는 수식이다. 예를 들어 x2+2x+3 같은 식을 의미한다. 그중 변수가 하나인 것을 일변수 다항식이라고 하고 이는 다음과 같이 표현한다.
f(x) = ax^n + bx^n-1+...+cx+d
최대 일차 일변수 다항식이 주어졌을 때 그 함수를 적분한 결과를 출력하는 프로그램을 작성하시오.

💡 문제 재정의

최대 1차 일변수 다항식이 주어졌을 때 적분값을 출력하라.

✏️ 계획 수립

우선 x의 계수와 상수항을 분리하고 x의 계수는 최대 1차항이기 때문에 n+1이 2로 고정되기에 2로 나눠준 값으로 교체한다.
x의 계수와 상수항을 구분하기 위해서 정규표현식을 사용한다.
사용하는 정규표현식은 다음과 같다.
1) -?\d+x
1차항을 받는 정규식이다.
-를 받을수도 있기때문에 ?로 감싸주고 2자리 이상의 정수를 받을 수도 있기때문에 \d+로 주고 마지막자리가 x인 것을 받는다.

2) [-, +]?\d+$
상수항을 받는 정규식이다.
-와 +를 받을 수 있기때문에 [-, +]를 ?로 감싸주고 나머지는 위와 같지만 항상 상수항을 뒤에 오기때문에 $를 붙여서 1차항의 계수가 못오도록 한다.

💻 계획 수행

import re

if __name__ == '__main__':
    polynomial = input()
    result = ''
    linear_term = re.findall('-?\d+x', polynomial)
    constant = re.findall('[-, +]?\d+$', polynomial)

    if polynomial == '0':
        result = 'W'
    else:
        if linear_term:
            num = str(int(linear_term[0][:-1]) // 2)
            if num[0].isdigit() or num[0] == '+':
                sign = ''
            else:
                sign = '-'

            if num in ['1', '-1']:
                result += sign + 'xx'
            else:
                result += num + 'xx'

        if constant:
            num = constant[0]
            if num not in ['+0', '-0']:
                if num[0].isdigit() or num[0] == '+':
                    sign = '+'
                else:
                    sign = '-'

                if num == '1':
                    result += 'x'
                elif num in ['-1', '+1']:
                    result += sign + 'x'
                else:
                    result += num + 'x'

        result += '+W'

    print(result)

🤔 회고

문제 자체를 해결하는데는 어렵지 않았지만 경우의 수가 너무 많아서 그에 맞게 if문을 분기하는데 시간이 걸린 문제였다.

profile
https://github.com/joonyeolsim

0개의 댓글