일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 스프링시큐리티
- ㅂ
- Spring Security
- Session1이 그 모든 클라이언트의 저올
- WebConfigurerAdapter
- 스프링 #스프링 시큐리티 #spring security
- WebSecurity
- securityconfig
- HttpSecurity
- ㅇㅇㅇㄴㅇ
Archives
- Today
- Total
다오의 개발일지
프로그래머스 LV0 분수의 덧셈 문제 본문
https://school.programmers.co.kr/learn/courses/30/lessons/120808
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
슥슥 풀다가 갑자기 어려운 문제가 등장.. 수학을 못하는 나에겐 이런 문제도 난이도가 높다.
처음에 생각했던 건 최대 공약수는 나머지가 존재하지 않지 않는가였다.
그에 따른 로직을 아래처럼 짜보았다.
class Solution {
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
int result2, result1;
//최대공약수존재
if(denom2 % denom1 == 0){
//moc은 최대공약수 값
int moc = denom2 / denom1;
//최대공약수로 나누기
result2 = (denom1 * denom2) / moc;
result1 = ((numer1 * denom2)+(numer2 * denom1)) / moc;
}else{
//최대공약수 존재X
result2 = denom1*denom2;
result1 = (numer1 * denom2)+(numer2 * denom1);
}
int[] answer = {result1, result2};
return answer;
}
}

두개의 예시 테스트를 통과하고 풀었구나... 생각했지만 최종테스트결과는 실패였다.
생각해보니 4와 6의 처럼 나머지가 존재하는 경우에도 최대공약수를 가질 수 있었다.
검색을 해보며 유클리드 호제법에 대해 알게되었다.
이를 토대로 다시 코드를 짜보았지만 성공률은 33.3퍼에서 멈추었다.

원인은 getGCD의 인수(argment)에 있었다.. 분자 분모 num1과 num2를 먼저 구한 후 인수에 넣어야 했지만 인수를denom1,denom2를 넣어버린 실수를 저질렀다.
수정한 코드를 통해 통과를 할 수 있었다.
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
int[] answer = new int[2];
//분자
int num1=numer1*denom2+numer2*denom1;
//분모
int num2=denom1*denom2;
int gcd= getGcd(num1, num2); //최대공약수를 구해준다.
answer[0] = num1/gcd;
answer[1] = num2/gcd;
return answer;
}
public static int getGcd(int a, int b) {
if(a%b==0) {
return b;
}
return getGcd(b, a%b);
}
'코딩테스트' 카테고리의 다른 글
프로그래머스 LV.0 한 번만 등장한 문자 (0) | 2023.06.01 |
---|---|
프로그래머스 LV.0 영어가 싫어요 (0) | 2023.06.01 |
프로그래머스 LV.0 소인수 분해 (0) | 2023.05.30 |
프로그래머스 LV.0 합성 수 찾기 (0) | 2023.05.26 |
프로그래머스 LV.0 최댓값 만들기 (1) (0) | 2023.05.26 |