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;
}
}
'Coding Test' 카테고리의 다른 글
(CodingTest) : 2일차 피자 나눠먹기 (3-1) (0) | 2025.02.06 |
---|---|
(SQL > SELECT) : 2일차 재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2025.02.06 |
(CodingTest) : 1일차 짝수는 싫어요 (3-2) (0) | 2025.02.05 |
(CodingTest) : 1일차 최빈값 구하기 (3-1) (0) | 2025.02.05 |
(SQL > SELECT) : 1일차 평균 일일 대여요금 구하기 (0) | 2025.02.05 |