본문 바로가기

Coding Test

(CodingTest) : 1일차 분수의 덧셈 (3-3)

 

 

1. 내 풀이(오답)

두번째 예시인 9,2,1,3인 경우에는 적용되지만,

첫번째 예시인 1,2,3,4인 경우에는 적용 안되는 문제

class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        
        // 1/2 + 3/4 => 2/4 + 3/4 = 5/4 
        // 9/2 + 1/3 => 27/6 + 2/6 = 29/6

        int a = (numer1*denom2+numer2*denom1);  // 10
        
         denom1 = (denom1*denom2)/denom1; // 4
         denom2 = (denom1*denom2)/denom2; // 2
        int b = denom1 * denom2; // 8    
        
    
        int[] answer = {a,b};
        return answer;
    }
}

 

 

2. 정답

* 잘 몰랐던 부분

i <= numer && i <= denom;    --> numer, denom 어떤 값이 더 클지 모르기에, 조건을 2개로 걸어두는 부분

if(denom % i == 0 && numer % i == 0){
                max = i;
            }

--> 이렇게 사고하는 부분이 아직 부족함 // if 조건에 일치하는 값이 여러개 나올 수 있지만, 그 중 가장 큰값을 찾기 위함

공약수 찾기 과정:

i = 1 → (4 % 1 == 0 && 8 % 1 == 0) → ✅ max = 1

i = 2 → (4 % 2 == 0 && 8 % 2 == 0) → ✅ max = 2

i = 3 → 조건 불만족 ❌

i = 4 → (4 % 4 == 0 && 8 % 4 == 0) → ✅ max = 4

 

class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        
        int numer = numer1*denom2+numer2*denom1;  // 10
        int denom = denom1 * denom2; // 8    
        
        int max = 1;
        
        for(int i = 1; i <= numer && i <= denom; i++){
            if(denom % i == 0 && numer % i == 0){
                max = i;
            }
        }
        
        numer = numer / max;
        denom = denom / max;
        
    
        int[] answer = {numer, denom};
        return answer;
    }
}