코드
def solution(polynomial):
polynomial = polynomial.replace(' ', '').split('+')
a, b = 0, 0
for i in polynomial:
if 'x' in i:
if len(i) > 1:
a += int(i[:-1])
else:
a +=1
else:
b += int(i)
if a == 0:
return '{}'.format(b)
elif a == 1:
if b == 0:
return 'x'
elif b != 0:
return 'x + {}'.format(b)
elif a > 1:
if b == 0:
return '{}x'.format(a)
elif b != 0:
return '{}x + {}'.format(a, b)
문자열로 주어지는 x에 대한 다항식을 정리하는 문제이다.
'3x + 7 + x' 이런 식으로 주어지면 '4x + 7'로 x끼리 더해 나타내면 된다. x가 없으면 상수항만 나타낸다.
먼저, 주어진 문자열에서 공백을 제거하고 + 기준으로 분리하였다.
공백을 제거하는 이유는 바로 다음에 x가 존재하는지 판별할 때 편리하게 하기 위함이다. 공백이 있으면 슬라이싱 하는 과정에서 고난을 마주하게 된다.
분리한 문자열 리스트를 가지고 for문을 진행한다.
첫 번째로, 식에 x가 존재하는지 확인한다.
x가 존재하면 해당 요소의 길이를 확인한다. 길이를 확인하는 이유는 x인지 3x인지 x 앞에 계수가 존재하는지 확인하기 위해서이다. 계수가 없으면 길이가 1일 것이고, 계수가 존재하면 길이가 1보다 클 것이다.
x가 존재하는 요소에서 계수를 모두 더해 a에 저장하고, x가 없으면 상수항이므로 b에 저장한다.
마지막으로 리턴을 위해 조건식을 세운다. 조건을 잘 세워야 한다!
x의 계수 a를 기준으로 먼저 조건을 세운다.
1) a=0 일 때, 상수항 b 출력(b의 값에 상관없음)
2) a=1 일 때,
2-1) b=0이면, x 출력(= 1x)
2-2) b!=0이면, x+b 형태로 출력
3) a>1 일 때,
3-1) b=0이면, ax 형태로 출력
3-2) b!=0이면, ax+b 형태로 출력
어려운 문제는 아니라고 생각된다. 하지만 마지막 문자열로 출력하는 부분에서 시간이 많이 소요되었다.
원인은 모르겠지만 처음 조건을 a가 아닌 b로 먼저 시작했더니 테스트 케이스 5, 6, 7번을 통과하지 못하는 문제가 발생했다.
a를 처음 조건으로 바꾸니 문제가 해결되어서 해결하려고 쏟았던 시간이 너무 아까웠다..