C#/복습 필요

[C#]분수의 덧셈(프로그래머스) - 복습 필요(9/8)

게임 개발은 즐거워 2025. 8. 4. 09:28

개선 코드 

 

또 새로푼 것 

* 에러

-> 눈을 씻고 찾아봐도 21번째 무리가 없는데... 20번째에서 ;을 빠뜨렸다 ! 

 

시도

using System;

// 입력 : 첫 번째 분수 분자 nemer1, 분모 denom1 / 분자 numer2, denom2 
// 출력 : 두 분수를 더한 분수 -> 기약 분수 / 정수 분자, 정수 분모 배열 answer 
public class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        //int[] answer = new int[] {};
        
        int tempNumer = 0;
        int tempDenom = 0;
        
        // 1. 분수 더하기 
        // ?? 무조건 분모 곱해도 됨? 같은지 판단하는 로직 = 불필요? (결과 같을 거 같긴 함 어차피 나눠주니까)
        
        // 2. 기약분수 만들기 : 분모 <- 반복문으로 나눠주기 
        
        // 분수 계산
        if (denom1 == denom2) // 분모 
        {
            tempNumer = numer1 + numer2;
            tempDenom = denom1;
        }
        else 
        {
            tempNumer = (numer1 * denom2) + (numer2 * denom1);
            tempDenom = denom1 * denom2;
        }
        
        
        // 반복문 
        // 에러 : 0으로 나누기 실패 
        //for (int i = 0; i < 1000; i++)
        for (int i = 1; i < 1000; i++)
        {
            if (tempDenom % i == 0) // 나눌 수 있으면 
            {
                tempNumer /= i; // i로 나눈 값
                tempDenom /= i;
            }
        }
            
        int[] answer = new int[2] {tempNumer, tempDenom};     
        return answer;
    }
}

 

 

로직 수정 : 분모 / 분자 전부 나누기 

using System;

// 입력 : 첫 번째 분수 분자 nemer1, 분모 denom1 / 분자 numer2, denom2 
// 출력 : 두 분수를 더한 분수 -> 기약 분수 / 정수 분자, 정수 분모 배열 answer 
public class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        //int[] answer = new int[] {};
        
        int tempNumer = 0;
        int tempDenom = 0;
        
        // 1. 분수 더하기 
        // ?? 무조건 분모 곱해도 됨? 같은지 판단하는 로직 = 불필요? (결과 같을 거 같긴 함 어차피 나눠주니까)
        
        // 2. 기약분수 만들기 : 분모 <- 반복문으로 나눠주기 
        
        // 분수 계산
        if (denom1 == denom2) // 분모 
        {
            tempNumer = numer1 + numer2;
            tempDenom = denom1;
        }
        else 
        {
            tempNumer = (numer1 * denom2) + (numer2 * denom1);
            tempDenom = denom1 * denom2;
        }
        
        Console.WriteLine(tempNumer);
        Console.WriteLine(tempDenom);
        
        // 반복문 
        // 에러 : 0으로 나누기 실패 
        //for (int i = 0; i < 1000; i++)
        for (int i = 1; i < 1000; i++)
        {
            // 아, 이게 분모만 나눠진다고 나누는 게 아니라 분자도 나눠야함 !! 
            if (tempDenom % i == 0 && tempNumer % i == 0) // 나눌 수 있으면 
            {
                tempNumer /= i; // i로 나눈 값
                tempDenom /= i;
            }
        }
            
        int[] answer = new int[2] {tempNumer, tempDenom};     
        return answer;
    }
}

 

* 로직 수정 : 반복문 (숫자 키우기 -> 숫자 줄이기) 

2, 3 나눌 수 있는 경우 2를 먼저 나누면 3으로 나누지 x 

-> 3부터 나누고 2 나누기 : o 

using System;

// 입력 : 첫 번째 분수 분자 nemer1, 분모 denom1 / 분자 numer2, denom2 
// 출력 : 두 분수를 더한 분수 -> 기약 분수 / 정수 분자, 정수 분모 배열 answer 
public class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        //int[] answer = new int[] {};
        
        int tempNumer = 0;
        int tempDenom = 0;
        
        // 1. 분수 더하기 
        // ?? 무조건 분모 곱해도 됨? 같은지 판단하는 로직 = 불필요? (결과 같을 거 같긴 함 어차피 나눠주니까)
        
        // 2. 기약분수 만들기 : 분모 <- 반복문으로 나눠주기 
        
        // 분수 계산
        if (denom1 == denom2) // 분모 
        {
            tempNumer = numer1 + numer2;
            tempDenom = denom1;
        }
        else 
        {
            tempNumer = (numer1 * denom2) + (numer2 * denom1);
            tempDenom = denom1 * denom2;
        }
        
        Console.WriteLine(tempNumer);
        Console.WriteLine(tempDenom);
        
        // 반복문 
        // 에러 : 0으로 나누기 실패 
        //for (int i = 0; i < 1000; i++)
        
        // 큰 수 -> 작은 수로 하면 될까? 
        // for (int i = 1; i < 1000; i++)
        for (int i = 1000; i > 1; i--)
        {
            // 아, 이게 분모만 나눠진다고 나누는 게 아니라 분자도 나눠야함 !! 
            if (tempDenom % i == 0 && tempNumer % i == 0) // 나눌 수 있으면 
            {
                tempNumer /= i; // i로 나눈 값
                tempDenom /= i;
            }
        }
            
        int[] answer = new int[2] {tempNumer, tempDenom};     
        return answer;
    }
}

 

// 먼저 풀었던 것 

using System;

// 입력 : 첫번째 분수 분자, 분모
// 입력 : 두 번째 분수 분자, 분모 
// 출력 : 두 분수를 더한 값 -> 분자, 분모 배열 
// 기약 분수 !
public class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        //int[] answer = new int[] {};
        
        // 분자 합
        int numerSum;
        // 분모 합
        int denomSum;
        
        // 분모 통일
        // 분모 같을 때, 다를때
        if (denom1 == denom2)
        {
            numerSum = numer1 + numer2;
            denomSum = denom1 + denom2;
        }
        // 분모 1, 2 나눠지는지 확인 <- 어떤 수가 더 큰지 모름...
        else if ()
        {
            
        }
        else 
        {
            denomSum = (denom1 * denom2);
            numerSum = numer1 * denom2 + numer2 * denom1;
        }
        int[] answer = {numerSum, denomSum};
        return answer;
    }
}



// 다시 푼 것

using System;

// 입력 : 첫번째 분수 분자, 분모
// 입력 : 두 번째 분수 분자, 분모 
// 출력 : 두 분수를 더한 값 -> 분자, 분모 배열 
// 기약 분수 !
public class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        // 분자 합
        int numerSum;
        // 분모 합
        int denomSum;
        
        // 분모 통일
        // 분모 같을 때, 다를때
        if (denom1 == denom2)
        {
            numerSum = numer1 + numer2;
            denomSum = denom1 + denom2;
        }
        // 분모 1, 2 나눠지는지 확인 <- 어떤 수가 더 큰지 모름... (denom2가 더 큼)
        else if (denom2 % denom1 == 0)
        {
            // denom1을 denom2로 통일
            int temp = denom2 / denom1; // 1로 나눈 몫 구해서, 곱해주기
            
            denomSum = denom2; // denom1 곱한 값 결국 denom2 ! 
            numerSum = numer1 * temp + numer2;
        }
        else 
        {
            denomSum = (denom1 * denom2);
            numerSum = numer1 * denom2 + numer2 * denom1;
        }
        int[] answer = {numerSum, denomSum};
        return answer;
    }
}

 

틀린 것 1 : 분모 같을때 -> 분모는 서로 더하면 안 됨 ! 

// denomSum = denom1 + denom2;
denomSum = denom1; // 더해주면 안 됨! (*로직 틀림*)

-> 33.3 점 

'C# > 복습 필요' 카테고리의 다른 글

C# - 거스름돈  (0) 2025.10.07