다음과 같은 규칙에 따라, 상수항부터 8차까지의 다항식의 계수가 주어집니다.
당신은 해당 다항식의 계수를 다항식으로 정리해야 합니다:
예를 들어, 계수가 0, 0, 0, 1, 22, -333, 0, 1, -1인 경우 다항식은 x^5 + 22x^4 - 333x^3 + x - 1과 같이 표시되어야 합니다.
입력 파일에는 하나 이상의 줄이 있으며, 각 줄에는 하나 이상의 공백으로 구분된 계수가 있습니다.
각 계수는 절대값이 1000 미만인 정수입니다.
각 줄에는 아홉 개의 계수가 포함되어 있습니다.
출력 파일은 각 줄마다 위의 규칙을 만족하는 다항식을 출력해야 합니다.
실버5의 구현 문제지만, 은근히 손이 많이 갔던 문제.
일단 첫 항의 경우 플래그를 사용해서 첫 항일 경우와, 아닌 경우를 나눠 출력했다.
그 후 부호 앞에 양 옆으로 공백이 있어야 했기에(...)
각 항의 부호를 따져 그에 맞게 공백을 직접 넣어주었다.
그리고 계수가 1일 경우 1x 이런 식으로 출력되면, 안 되므로 해당 부분 관련해서도 모든 차수에서 제대로 출력될 수 있게끔 작업을 따로 해주었다.
정리하자면,
이걸 고려해서 분기 처리를 하나씩 하면서 구현하면 된다.
그리고 역순으로 다항식을 출력해야 하므로 역순으로 입력 값을 돌아야 하며, EOFError 처리도 해줘야 한다.
마지막으로 모든 계수가 0일 경우 0이 나와야 한다! 놓치면 안 되는 포인트.
def read_next():
coef = []
try:
coef = list(map(int, input().split()))
except EOFError:
return None
return coef[::-1]
def print_it(coef):
i_first = True
for i in range(8, -1, -1):
if coef[i] or i == 0:
sign = 1 if coef[i] > 0 else (-1 if coef[i] < 0 else 0)
if not sign and (i or not i_first):
continue
if sign == -1:
print(("-" if i_first else " - "), end="")
coef[i] *= sign
elif not i_first and sign:
print(" + ", end="")
if coef[i] != 1 or not i:
print(abs(coef[i]), end="")
if i:
print(("x^" + str(i) if i > 1 else "x"), end="")
i_first = False
print()
if __name__ == "__main__":
while True:
coefficients = read_next()
if coefficients is None:
break
print_it(coefficients)