728x90
https://school.programmers.co.kr/learn/courses/30/lessons/120878
정말 많은 시간을 들여 짱구를 굴려보았다.
오랜만에 초등학생으로 돌아가서 씽크빅 학습지로 무진장 풀던 나눗셈과 약분을 했던것 같다.
예외처리가 너무 많아서 수많은 테스트케이스에서 뭐는 통과하고 뭐는 실패하고가 뒤죽박죽이었는데 테스트케이스가 무엇인지 볼 수 없어서 골때렸던 문제이다.
기존 작업 코드가 날아가버려서…
대충 이 사진만 보더라도 (생각 과정의 전부는 아니지만) 감이 잡히겠다.
나의 (구)고생길 감.
한가지 기억이 나는 테스트케이스 함정은… 바로바로 테스트케이스 1번.
약분 결과 분자가 1인데, 나는 넘겨주는 값을 1이 아닌 원래의 분자값으로 넘겨줘버렸다.
얘때문에 다 된줄 알던 코드를 일주일은 더 붙잡았다,,,ㅎㅎ
아무튼 중요 알고리즘은,
분모를 5로 나누고, 나눈 값을 새로운 분모로 갱신해서 또 5로 나누고 또 5로 나누고~~~를 반복하다가 더 5로 안나눠지면 그때의 갱신된 분모를 이제,
2로 나누고 갱신하고, 나누고 갱신하고~~~ 를 반복한다.
갱신된 최종 분모가 1보다 더 큰 수라면, 이 분모는 5와 2 이외의 약수를 갖고 있다는 뜻이므로, 2를 반환해준다.
단, 최종 분모가 예로들어서 3인데, 전달받은 분자가 3의 배수라면 이 둘은 나누어떨어지므로 이 경우에는 1을 반환해준다.
n차 - 최최최최최최최최최종
package programmers.유한소수_판별하기;
public class Solution {
public static void main(String[] args) {
int a = 7;
int b = 20;
Solution sol = new Solution();
System.out.println(sol.solution(a, b));
}
public int solution(int a, int b) {
int answer = 0;
// 자연수일때(분자가 분모의 배수일 때)
if (a % b == 0) {
answer = 1;
return answer;
}
// 분모가 분자의 배수일때(약분 결과, 분자가 1인 분자.)
else if (b % a == 0) {
int c = b / a;
return result(c, 1);
}
// 둘이 배수관계에 있지 않을 때.
else {
answer = result(b, a);
}
return answer;
}
public static int result(int x, int y) {
int answer = 0;
while (x % 5 == 0) {
x = x / 5;
}
while (x % 2 == 0) {
x = x / 2;
}
if (x > 1) {
if (y % x == 0) {
answer = 1;
} else {
answer = 2;
}
} else {
answer = 1;
}
return answer;
}
}
728x90
'JAVA > 코드 과제' 카테고리의 다른 글
[JAVA] 스타트와 링크 (백준 14889번) (0) | 2023.04.01 |
---|---|
[JAVA] OX퀴즈( ' 문자열 수식 배열 '의 참/거짓 결과 반환하기) (2) | 2023.03.05 |
[JAVA] 배열의 유사도 (0) | 2023.02.22 |
[JAVA] 자릿수 더하기 (0) | 2023.02.21 |
[JAVA] 최빈값 구하기 (0) | 2023.02.20 |