성능 요약
메모리: 80.3 MB, 시간: 0.42 ms
구분
코딩테스트 연습 > 코딩테스트 입문
채점결과
정확성: 100.0
합계: 100.0 / 100.0
제출 일자
2023년 10월 4일 15:36:30
문제 설명
첫 번째 분수의 분자와 분모를 뜻하는 numer1
, denom1
, 두 번째 분수의 분자와 분모를 뜻하는 numer2
, denom2
가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
제한사항
- 0 <
numer1
,denom1
,numer2
,denom2
< 1,000
입출력 예
numer1 | denom1 | numer2 | denom2 | result |
---|---|---|---|---|
1 | 2 | 3 | 4 | [5, 4] |
9 | 2 | 1 | 3 | [29, 6] |
입출력 예 설명
입출력 예 #1
- 1 / 2 + 3 / 4 = 5 / 4입니다. 따라서 [5, 4]를 return 합니다.
입출력 예 #2
- 9 / 2 + 1 / 3 = 29 / 6입니다. 따라서 [29, 6]을 return 합니다.
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
class Solution {
class Fractional{
private int numerator;
private int denominator;
public Fractional(int numerator, int denominator){
this.numerator = numerator;
this.denominator = denominator;
normalization();
}
public int getNumerator(){
return numerator;
}
public int getDenominator(){
return denominator;
}
public Fractional add(Fractional other){
return new Fractional(this.numerator * other.getDenominator() + other.getNumerator() * this.denominator
, this.denominator * other.getDenominator());
}
private void normalization(){
int value = GCD();
numerator /= value;
denominator /= value;
}
private int GCD(){
int min = Math.min(numerator,denominator);
int max = Math.max(numerator,denominator);
while(min != 0){
int tmp = min;
min = max % min;
max = tmp;
}
return max;
}
}
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
Fractional a = new Fractional(numer1, denom1);
Fractional b = new Fractional(numer2, denom2);
Fractional c = a.add(b);
return new int[] {c.getNumerator(), c.getDenominator()};
}
}
'알고리즘 - Programmers > Unrated' 카테고리의 다른 글
[프로그래머스] [이차원 배열 대각선 순회하기] : unrated 자바(Java) (0) | 2023.11.11 |
---|---|
[level unrated] 날짜 비교하기 - JAVA[자바] (0) | 2023.10.13 |
[level unrated] 세로 읽기 (0) | 2023.10.12 |
[level unrated] 9로 나눈 나머지 (1) | 2023.10.10 |
[level unrated] 주사위 게임 2 (0) | 2023.10.10 |