[프로그래머스][파이썬] 다항식 더하기 - 문자열 (Level 0)

뻥튀기아이스크림·2025년 3월 23일
1
post-thumbnail

◽ 문제 출처

https://school.programmers.co.kr/learn/courses/30/lessons/120863

◽ 문제

◽ 입력 & 출력

◽ 내 풀이

def solution(polynomial):
    terms = polynomial.split(' + ')
    
    x_sum = 0
    const_sum = 0

    for term in terms:
        if 'x' in term:
            coeff = term.replace('x', '')
           
            x_sum += int(coeff) if coeff else 1
        else:
            const_sum += int(term)
    
    result = []
    
    if x_sum:
        result.append(f"{x_sum}x" if x_sum > 1 else "x")
        
    if const_sum:
        result.append(str(const_sum))
    
    return ' + '.join(result)
  • terms 변수에 ' + ' 를 기준으로 항들을 나눈 값을 담아둔다.
  • x 항의 계수와 상수항 합을 저장할 변수 초기화하고, 각 항을 하나씩 확인한다.
  • x 가 있는 항은 계수를 추출해야하니 replace() 사용해서 계수만 추출하는데, x 만 있었다면 생략된 계수인 1 을 대입한다.
  • 만약 상수항이면 그냥 더해주면 된다.
  • x 항이 존재하면 추가하는데, 계수가 1 일 경우에는 1x 가 아니라 x 로 표현하게 했고, 상수항은 존재하면 그대로 추가했다.

◽ 다른 사람 풀이

def solution(polynomial):
    xnum = 0
    const = 0
    
    for c in polynomial.split(' + '):
        if c.isdigit():
            const += int(c)
        else:
            xnum = xnum+1 if c == 'x' else xnum + int(c[:-1])
            
    if xnum == 0:
        return str(const)
    elif xnum == 1:
        return 'x + ' + str(const) if const != 0 else 'x'
    else:
        return f'{xnum}x + {const}' if const != 0 else f'{xnum}x'
  • 계수 추출과 결과물 출력은 비슷하지만, x 의 계수를 xnum + int(c[:-1]) 로 추출했다.

◽ 더 나아가기

def solution(polynomial):
    x_sum, const_sum = 0, 0

    for term in polynomial.split(' + '):
        if 'x' in term:
            coeff = term[:-1]  # 'x'를 제외한 부분
            x_sum += int(coeff) if coeff else 1 # 계수가 1인 경우 처리
        else: # 상수항이면 더해주기
            const_sum += int(term)

    # 결과 문자열 조합
    parts = []
    if x_sum:
        parts.append(f'{x_sum}x' if x_sum > 1 else 'x')
    if const_sum:
        parts.append(str(const_sum))

    return ' + '.join(parts)
  • ChatGPT 통해 코드를 개선해보려고 했더니 이 코드를 작성해줬다.
  • xnum == 1 등 조건 분기를 축소하고, 삼항 연산을 더 최소화할 수 있었다.



피드백은 언제나 환영입니다 :)

profile
성장하고 싶은 개발자

0개의 댓글