Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 방정식 a + b = c에서 누락된 값 찾는 방법

문제 개요

a + b = c 형태의 방정식이 있고, 이 중 a, b, c 세 항 가운데 하나가 누락되어 있다고 가정해 봅시다. 우리가 해야 할 일은 누락된 값을 찾아내는 것입니다.

예를 들어 입력이 ? + 4 = 9와 같다면, 출력은 5가 되어야 합니다.

해결 접근 방식

이 문제는 다음 단계를 따라 해결할 수 있습니다.

  • 문자열에서 모든 공백을 제거한 뒤, '+' 기호와 '=' 기호를 쉼표(',')로 치환합니다.
  • 쉼표를 기준으로 문자열을 분할하여 각 항을 담은 리스트(elements)를 만듭니다.
  • 인덱스 변수(idx)를 0으로 초기화합니다.
  • 리스트의 처음부터 끝까지 순회하면서 숫자가 아닌 요소(즉, '?'로 표시된 누락된 항)의 위치를 찾아 idx에 저장하고 반복을 종료합니다.
  • 누락된 위치에 따라 다음과 같이 계산합니다.
    • 마지막 항(c)이 누락된 경우: 첫 번째 항 + 두 번째 항
    • 두 번째 항(b)이 누락된 경우: 마지막 항 − 첫 번째 항
    • 첫 번째 항(a)이 누락된 경우: 마지막 항 − 두 번째 항

구현 예제

아래 코드를 통해 실제 동작을 더 잘 이해할 수 있습니다.

def find_missing(string):
    string = string.strip().replace(' ', '')
    string = string.replace('=', ',')
    string = string.replace('+', ',')
    elements = string.split(',')
    idx = 0
    for i in range(len(elements)):
        if not elements[i].isnumeric():
            idx = i
            break
    if idx == 2:
        return int(elements[0]) + int(elements[1])
    elif idx == 1:
        return int(elements[2]) - int(elements[0])
    elif idx == 0:
        return int(elements[2]) - int(elements[1])

print(find_missing('6 + 8 = ?'))
print(find_missing('? + 8 = 20'))
print(find_missing('5 + ? = 15'))

입력

'6 + 8 = ?'
'? + 8 = 20'
'5 + ? = 15'

출력

14
12
10

코드 설명

먼저 strip()replace()를 사용해 문자열에서 공백을 제거하고 연산자를 쉼표로 바꿉니다. 그런 다음 split(',')으로 세 개의 항을 리스트로 분리합니다. 이후 각 항을 검사하여 isnumeric() 결과가 False인 요소, 즉 '?' 자리의 인덱스를 찾습니다.

누락된 위치가 인덱스 2(마지막)라면 덧셈으로 결과를 구하고, 인덱스 1이라면 마지막 값에서 첫 번째 값을 빼고, 인덱스 0이라면 마지막 값에서 두 번째 값을 빼서 누락된 수를 계산합니다. 이 알고리즘은 문자열 길이에 비례하는 선형 시간 O(n) 안에 동작하며, 간단한 산술 관계만으로 정답을 도출하기 때문에 매우 효율적입니다.