2021/11/11 목요일

Gong Intaek·2021년 11월 11일
0

일상

목록 보기
153/1031
post-thumbnail

TIL


오늘 한 일

  • 휴식
  • leetcode
    • Fraction Addition and Subtraction. (medium)

문제 풀이

Fraction Addition and Subtraction. (medium)

분수의 덧셈 뺄셈을 수행하는 코드이다. 계산할 수식은 문자열로 입력되며 숫자, /, +, - 만 사용된다.

풀이를 위해 구식의 각 분수를 분류 해야하는데 그 기준점으로는 연산기호(+, -)를 기준으로 사용하였다.
문자열을 인덱스별로 반복을 하다가 기준점을 만나면 해당 시점까지 저장하고 있던 문자열을 사용하여 연산을 수행하고 저장 문자열으 초기화 하여 다음 작업을 수행하는 방식이다.

하나의 함수로 정리하기에는 복잡해질것 같아(우선 풀이를 생각한 방식이 좀 길었다..) 두가지 함수를 별도로 작성하였다. 하나는 두 분수 문자열을 입력 받아 연산을 수행하고 결과로 돌려주는 함수 이다.

이 계산은 분모와 분자를 따로 계산하고 정리하는 방식을 사용하였다. 두 분수의 분모, 분자를 분리하고 두 분모를 곱하여 공통 분모를 만들고 반대되는 분모를 분자에 곱하여 분모에 맞는 분자로 변경하였다.(통분) 이후 분자의 연산을 수행하고, 계산된 분수를 약분하여 돌려주게 하였다.

약분시 가장 큰 공약수가 필요로 한데 이는 분모와 분자 두수 중 더 작은수의 약수들을 구하고 가장 큰약수 부터 해당 약수로 분자와 분모 모두 나누어지는지를 확인하여 사용하였다.

그리고 이 약수를 구하는 부분을 또 다른 함수로 분류 하여 작성하였다.(1부터 주어진 수의 제곱근까지 반복 하면서 주어진 수로 나누어지는지를 확인하여 주어진 수와 주어진 수로 나누어지는 수를 약수로 받아가는 방식이다.)

다시 계산 함수로 돌아가서 계산시 세 가지 기준으로 분류하여 계산을 진행하였는데,

  1. 분자의 연산이 0인 경우, 분모의 값과 상관없이 분모를 1로 변경.

  2. 분자가 분모보다 큰 경우, 분모의 약수로 계산을 진행.

  3. 분모다 분자보다 큰 경우, 분자의 약수로 계산을 진행.

와 같이 진행하고 계산된 결과물을 문자열로 변경하여 돌려주게 하였다.

이와 같은 방식으로 주어진 문자열의 모든 분수를 계산한뒤 결과로 돌려주게 작성하여 해당 문제를 풀이하였다. 하지만 문제 발생시 그때마다 코드를 수정하면서 문제를 풀이하였던지라 작성된 코드가 좀 누덕 누덕하다는 생각이 들었다. 하지만 당장 더 깔끔한 방식의 코드도 생각나지 않기에 좀 아쉽다는 생각이 들었다.


오늘은...

휴식

profile
개발자가 되기위해 공부중

0개의 댓글