관리 메뉴

솜씨좋은장씨

[Programmers] 다항식 더하기 (Python) 본문

Programming/코딩 1일 1문제

[Programmers] 다항식 더하기 (Python)

솜씨좋은장씨 2023. 3. 1. 15:33
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 프로그래머스의 다항식 더하기 입니다.

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

👨🏻‍💻 문제 풀이

1. 다항식을 유일한 연산자인 + 로 나누어 앞에서부터 항을 하나씩 꺼내옵니다.

    for variable in polynomial.split(" + "):

 

2. 꺼내온 항이 숫자로 구성되어있는지 숫자와 문자로 구분되어있는지 비교합니다.

2-1.  만약 숫자와 문자로 구성되어있는 항 일 경우

        if not variable.isnumeric():
            variable_name = variable[-1]
            variable_num = int(variable[:-1]) if variable[:-1] != '' else 1

            if variable_name not in calc_dict:
                calc_dict[variable_name] = 0

이 문제에서 주어지는 항에 있는 변수는 x 이면서 맨 뒤에 존재하므로 맨 마지막 값을 꺼내와서 변수명으로 하고

그 앞의 값들을 int 로 바꾸어 변수의 숫자로 만들어주었습니다.

이때 변수 x 앞에 숫자가 없을 경우에는 1을 

만약 "3x"일 경우 -> variable_name 은 "3x" 의 맨 뒤 값인 x 나머지 값을 int 로 변환하여 variable_num 으로 

만약 "x" 일 경우 -> variable_name 은 "x" 의 맨 뒤 값인 x 그 앞 나머지 값은! 없으므로 1을 variable_num 으로

설정했습니다.

 

새로운 variable_name 이 생길때마다

calc_dict dictionary 에 variable_name 을 key 로 하고 value 를 0 으로 설정하였습니다.

 

각 항마다 나오는 variable_name 을 key 로 calc_dict 에 있는 값에 variable_num 을 계속 더해주었습니다.

2-2. 숫자로만 구성되어있는 항 일 경우

        else:
            if '' not in calc_dict:
                calc_dict[''] = 0
            calc_dict[''] += int(variable)

숫자로 구성되어있는 경우에는 calc_dict 에 '' 을 key 로 value 를 0으로 설정한 뒤 해당 값에 계속 더해주었습니다.

3. calc_dict 을 활용하여 계산한 다항식을 완성합니다.

" + ".join([f"{v if v > 1 else ''}{k}" if k != '' else f"{v}" for k, v in sorted(calc_dict.items(), key=lambda x: x[0], reverse=True)])

이때 x 앞의 값이 1일때를 고려하였습니다.

👨🏻‍💻 코드 ( Solution )

def solution(polynomial):
    calc_dict = {}
    
    for variable in polynomial.split(" + "):
        if not variable.isnumeric():
            variable_name = variable[-1]
            variable_num = int(variable[:-1]) if variable[:-1] != '' else 1

            if variable_name not in calc_dict:
                calc_dict[variable_name] = 0
            calc_dict[variable_name] += variable_num
        else:
            if '' not in calc_dict:
                calc_dict[''] = 0
            calc_dict[''] += int(variable)            
    
    return " + ".join([f"{v if v > 1 else ''}{k}" if k != '' else f"{v}" for k, v in sorted(calc_dict.items(), key=lambda x: x[0], reverse=True)])
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments