다항식(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문을 분기하는데 시간이 걸린 문제였다.