반응형
다시 돌아온 코딩 테스트 타임이다. 진짜 다 까먹어서 기초의 기초의 기초부터 튀기려고 한다.
근데 나 첫 취준 때 코테 보기 싫어서 공기업 커리어 탄건데...
결국 공공도 코테 보는 엔딩^^ 이럴 거면 그냥 사기업 갈까 봐요
각설하고 시작하는 이번 문제는 "분수의 덧셈"입니다.
사실 이것도 n트만에 성공했어요.
그래도 자바가 공통적으로 많이 쓰인대서 자바 하려고 하는데... 낯설다.
나 전에 자바로 어떻게 어플도 만들고 했지? 과거의 나 칭찬해~
문제 내용
첫 번째 분수의 분자와 분모를 뜻하는 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차 도전)
class Solution {
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
int[] answer = {0, 0};
int[] divn = new int[1000]; // 기약분수를 위해, 최대공약수 찾는 용도
int i = 1; int n = 0;
// 일단 분수 덧셈 먼저 해준다
answer[0] = numer1*denom2 + numer2*denom1;
answer[1] = denom1*denom2;
// 덧셈 결과물을 기약분수로 나누기 위해 최대 공약수를 찾는 부분
for (i=1; i<=answer[0] || i<= answer[1]; i++){
if ((answer[0]%i==0) && (answer[1]%i==0)){
divn[n] = i;
n++;
} // 가장 마지막에 들어간 n이 최대 공약수임
// 근데 생각해보니 배열 안쓰고 그냥 변수 하나로 해도 되잖아?
}
answer[0] = answer[0]/divn[n-1];
answer[1] = answer[1]/divn[n-1];
return answer;
}
}
작성 코드(2차 도전)
class Solution {
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
int[] answer = {0, 0};
int i = 1;
int divmax = 0; // 최대공약수를 저장할 수 있는 변수로 바꿈
answer[0] = numer1*denom2 + numer2*denom1;
answer[1] = denom1*denom2;
for (i=1; i<=answer[0] || i<= answer[1]; i++){
if ((answer[0]%i==0) && (answer[1]%i==0)){
divmax = i; // 제일 마지막에 저장되는 애가 최대공약수
}
}
answer[0] = answer[0]/divmax;
answer[1] = answer[1]/divmax;
return answer;
}
}
사실 뇌가 굳어서 구글의 힌트를 조금 보고 풀긴 했다.
사실 진짜진짜 처음에는 이프엘즈 난무함...ㅋ
어려운 문제도 척척 푸는 그 날까지 노력해보겠어
(문제 출처 : 프로그래머스 https://school.programmers.co.kr/learn/courses/30/lessons/120808)
반응형
'공부 > 코딩' 카테고리의 다른 글
[프로그래머스/입문] 저주의 숫자 3 (0) | 2024.12.05 |
---|