문제풀이
1. start를 전에 "+" 또는 "-" 연산자의 인덱스라고 하면, end는 start 이후의 첫 "+" 또는 "-" 연산자가 있는 인덱스입니다.
2. start부터 end까지의 sub string을 term 이라 하면, terms에서 x의 개수와 계수를 찾아줍니다. 계수는 맨앞에서부터 term의 length에서 x의 개수를 빼준 값까지의 term의 sub string이 됩니다. 예를들면, 6xx라 하면 len(term)은 3이고, xx는 2 이므로 term[:3-2]를 해준 후 정수로 파싱해주면 됩니다. x의 개수의 경우, 저는 collections.Counter를 사용하였습니다. 계수가 존재하지 않는 경우에는 1이 됩니다.
3. 적분한 값의 계수는 원래 계수를 x의 개수에서 1을 더해준 값으로 나누어준 값이 됩니다. 또한, 적분한 계수가 1이라면 생략해주어야합니다. 또한 뒤에 x를 하나 더 붙여주면 됩니다.
Python Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
import collections
eq = input()
def integrate(term):
t_dic = collections.Counter(term)
a=term[:len(term)-t_dic["x"]]
a = int(a) if len(a) != 0 else 1
b = str(a//(t_dic["x"]+1))
result = b + "x" * (t_dic["x"]+1) if b != "1" else "x" * (t_dic["x"]+1)
return result
op = ["+","-"]
if eq[0] in op:
answer = eq[0]
start = 1
end = 1
else :
answer = ""
start = 0
end = 0
if eq[start] == "0":
print("W")
else:
while end < len(eq):
if eq[end] not in op:
end += 1
else:
answer += integrate(eq[start:end])
#부호
answer += eq[end]
start = end + 1
end += 1
answer += integrate(eq[start:])+"+W"
print(answer)
|
cs |
line 15 : 주어진 식이 "-"로 시작하는 경우입니다.
line 30 : term으로 주어지는 eq[start:end]는 부호를 제외한 숫자와 x만으로 구성된 항입니다. 부호의 경우 line 32에서 뒤의 부호를 붙여주게 됩니다.
line 35 : 저처럼 풀 경우에는 마지막 항이 while문에서 처리되지 않으므로, 따로 처리해주어야합니다.
line 23 : 0이 입력값으로 주어지는 경우 0x+W로 반환되는 것에 대한 예외처리입니다.
문제링크
17214번: 다항 함수의 적분
첫째 줄에 최대 일차 일변수 다항식이 주어진다. 항의 개수는 최대 2개이고, 변수는 항상 x로 주어지며, 각 항은 공백 문자로 구분되지 않는다. 주어지는 계수는 절댓값이 10,000을 넘지 않는 0이 아닌 2의 배수이고 주어지는 상수는 절댓값이 10,000을 넘지 않는 정수이다. 차수가 같은 항은 한 번만 주어진다. 단, 계수의 절댓값이 1인 경우에는 1을 생략한다. 다항식은 차수가 큰 것부터 작아지는 순서대로 주어진다.
www.acmicpc.net
'알고리즘 > 백준' 카테고리의 다른 글
백준 2467 용액 (0) | 2020.03.12 |
---|---|
백준 1300 K번째 수 (0) | 2020.03.11 |
백준 2869 달팽이는 올라가고 싶다 (0) | 2020.03.09 |
백준 1890 점프 (0) | 2020.03.09 |
백준 17478 재귀함수가 뭔가요? (0) | 2020.03.08 |