
이력서와 포트폴리오를 리팩토링하는 동시에 알고리즘 문제를 풀어보았다.
정글에서는 Python으로 풀었는데, Java 언어를 좋아하기도 하고 원하는 직무들이 백엔드라 거의 다 Java로 시험을 보길래 처음부터 다시해야한다.
백준이 아닌 프로그래머스라는 사이트를 활용하여 연습했다.
코딩 테스트 문제를 풀었다. 밀린 문제들을 정리해서 노션에 정리도 해봐야겠다. 앞으로 프로그래머스에서 문제를 풀 것이다.
num1과 num2를 나눈 값에 1000을 곱한 값을 리턴하면 된다.
class Solution {
public int solution(float num1, float num2) {
int result = (int) (1000 * (num1 / num2));
return result;
}
}
정수 num1과 num2가 같으면 1, 다르면 -1을 리턴하면 된다.
class Solution {
public int solution(int num1, int num2) {
if (num1 == num2) {
return 1;
}
else
return -1;
}
}
numer1과 denom1로 이루어진 분수와 numer2와 denom2로 이루어진 분수의 덧셈의 기약분수를 구하면됩니다.
해당문제가 기약분수를 구하는 문제때문에 푸는데 시간이 오래걸렸습니다. 유클리드 호제법에 따라 기약분수를 구할 수 있다고 합니다.
마지막 gcd를 통해 분자, 분모의 최대공약수를 구할 수 있습니다. 그럼 그 최대공약수를 분자와 분모에 각각 그 값으로 나누면 기약분수를 구할 수 있습니다.
코드로는 다음과 같이 나타낼 수 있습니다.
class Solution {
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
int son = numer1 * denom2 + numer2 * denom1;
int mom = denom1 * denom2;
int g = gcd(Math.abs(son), Math.abs(mom));
son /= g;
mom /= g;
if (mom < 0) {
son = -son;
mom = -mom;
}
return new int[] {son, mom};
}
public int gcd(int a, int b) {
while(b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
}
정수 배열 numbers의 각 원소에 두배한 값을 리턴하면 됩니다.
할 방법은 알겠는데, 코드로 어떻게 작성하는지 헤멧습니다. for문을 사용하면 됩니다.
class Solution {
public int[] solution(int[] numbers) {
int [] answer = new int[numbers.length];
for (int i = 0; i < numbers.length; i++) {
answer[i] = numbers[i] * 2;
}
return answer;
}
}
정수 num1과 num2에 대해 나눈 나머지를 리턴하면 됩니다.
class Solution {
public int solution(int num1, int num2) {
int answer = num1 % num2;
return answer;
}
}
어떤 배열들의 중앙값을 구하기만 하면 됩니다. 9, -1, 0이면 중앙값은 0 입니다.
오름차순 정렬과 배열 길이를 사용하여 구하였습니다.
import java.util.Arrays;
class Solution {
public int solution(int[] array) {
int size = array.length;
int half = (size + 1) / 2;
Arrays.sort(array);
return array[half - 1];
}
}