반응형
내 코드 (틀림)
import java.util.*;
class Solution {
public int solution(int a, int b) {
int answer = 0;
for(int i = 2 ; i < Math.min(a,b) ; i++) {
// 기약분수로 만들기
if((a % i == 0) && (b % i == 0)) {
a /= i;
b /= i;
}
}
// 분모의 소인수가 2와 5만 존재하는 경우
if(b % 2 == 0 || b % 5 == 0 || b % 10 == 0) {
answer = 1;
} else {
answer = 2;
}
return answer;
}
}
처음에 작성한 코드는 이거..
기약분수로 나타내었을 때 분모의 소인수가 2와 5만 존재해야 한다고 해서 이렇게 작성했었다..
무슨 조건을 더 해줘야할까... 생각하다가
그냥 기약분수 구하는 유클리드 호제법을 쓰던 분수의 덧셈 문제가 생각나서
참고하면서 아예 새로 코드 작성하기로 했다.
그리고 다른 분 답도 참고했다..
정답
class Solution {
public int solution(int a, int b) {
int newB = b / gcd(a, b);
while(newB != 1) {
if(newB % 2 == 0) newB /= 2;
else if(newB % 5 == 0) newB /= 5;
else return 2;
}
return 1;
}
private int gcd(int a, int b) {
if(b == 0) return a;
else return gcd(b, a % b);
}
}
다른 분 답을 참고하고 보니
내 초기 코드에서 무슨 문제가 있었는지 알았다.
'분모가 2와 5와 10으로 나눠지는 경우라면 분모의 소인수가 2와 5로만 구성된 분모일 것이다' 라고 생각했는데
그게 아니었다.
먼저 분자와 분모의 최대공약수를 구해놓고,
이 값이 2/5로 나눠지면 분모를 2/5로 나누고 반복문을 자꾸 돌게 해야 했던 것..
아무튼.... 그다지 어렵지 않아보여서 금방 풀거라 생각했는데 풀다 보니 생각보다 시간이 또 금방 지나있다.ㅠㅠ
반응형
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Lv. 0] 저주의 숫자 3 (0) | 2023.02.14 |
---|---|
[프로그래머스/Lv. 0] 연속된 수의 합 (0) | 2023.02.14 |
[프로그래머스/Lv. 0] 다항식 더하기 (0) | 2023.02.13 |
[프로그래머스/Lv. 0] 소인수분해 (0) | 2023.02.11 |
[프로그래머스/Lv. 0] 캐릭터의 좌표 (0) | 2023.02.11 |