본문 바로가기
PYTHON

파이썬 프로그래머스 코딩테스트 연습 입문_다항식 더하기

by jnhn 2023. 7. 4.
파이썬 프로그래머스 코딩테스트 연습 입문_다항식 더하기_split, replace

문제 설명: 한 개 이상의 항의 합으로 이루어진 식을 다항식이라고 합니다. 다항식을 계산할 때는 동류항끼리 계산해 정리합니다. 덧셈으로 이루어진 다항식 polynomial이 매개변수로 주어질 때, 동류항끼리 더한 결괏값을 문자열로 return 하도록 solution 함수를 완성해보세요. 같은 식이라면 가장 짧은 수식을 return 합니다.

내 풀이:

def solution(polynomial):
    a = polynomial.replace(' ', '').split('+') #polynomical에서 공백을 지우고, +를기준으로 나눔 
    b, c = 0, 0 #각 항의 계수 b,c를 0,0으로 설정
    ##각 계수를 뽑아내는 for 문
    for i in a: #a안에 담긴 각 항을 하나씩 뽑아내는데
        if 'x' in i: # i가 x항일때
            if len(i) == 1:  #(계수가 1이면 생략되니까) 길이가 1인 (1)x라면 x의 계수에
                b += 1 # 1을 더함
            else: # x의 계수가 1이상이면
                b += int(i[:-1]) #마지막 글자인 x앞의 글자들을 integer로 변환시켜서 b에 더해줌
        else: #상수만 있을때
            c += int(i) #i를 int로 변환시켜서 c에 더함
    ##뽑아낸 계수로 다항식을 만드는 조건
    if c == 0:  # c가 0 즉, 상수가 없는 경우
        if b == 1: #x의 계수가 1이면
            return ('x') #1이생략되고 x만 출력
        elif b >1: # x의 계수가 1이 아니면
            return (str(b)+'x') #상수없이 x계수(b)와 x 만 출력
        elif b == 0: #모든 계수가 0이면 0 출력
            return ("0")
    elif c != 0: #상수항이 있는 경우
        if b == 1: # x의 계수가 1이면
            return ('x + '+str(c)) #b는 생략되고 x + 상수
        elif b >1: # x의 계수가 1이상이면
            return (str(b)+'x + '+str(c)) #각 계수별로 다항식 출력
        elif b == 0:
            return (str(c)) # x의 계수가 0이면 x항 없이 상수항만 출력

사실 문제 자체가 어렵고 생소한 코드를 쓰는건 아닌데, 제한사항이 많아서 푸는데 오래걸렸다. 하필 입출력예는 너무 심플한 문제들로 구성되어서 뭐가 잘못됐는지 찾는데 한참 걸렸다. 보통 코테들은 나는 되게 원시적인 방법으로 풀이하고, 남들은 멋진 람다와 map등등 익숙치 않은 함수를 사용해서 기똥찬 풀이를 하곤하던데 이 문제는 다른 사람들도 식이 엄청 긴것을 보고는 끄덕하게 되었달까 그래도 풀어내서 뿌듯했다~