코딩테스트 준비 DAY2

차준우·2022년 12월 7일
0

프로그래머스 코딩테스트 입문 - DAY2

두 수의 나눗셈
정수 num1과 num2가 매개변수로 주어질 때, num1을 num2로 나눈 값에 1,000을 곱한 후 정수 부분을 return 하도록 soltuion 함수를 완성해주세요.

테스트 케이스

class Solution {
    public int solution(int num1, int num2) {
        int answer = 0;
        double result = (double)num1 / num2;
        answer= (int)(result * 1000);
        return answer;
    }
}
  • double형과 float형으로 실수 표현 : 표현할 수 있는 자릿수가 큼
  • return 값의 형태가 int이므로 result*1000을 int화 해야 한다

숫자 비교하기
정수 num1과 num2가 매개변수로 주어집니다. 두 수가 같으면 1 다르면 -1을 retrun하도록 solution 함수를 완성해주세요.

테스트 케이스

class Solution {
    public int solution(int num1, int num2) {
        int answer = 0;
        if(num1==num2) {
            answer = 1;
        }
        else{
            answer = -1;
        }
        return answer;
    }
}

분수의 덧셈
첫 번째 분수의 분자와 분모를 뜻하는 denum1, num1, 두 번째 분수의 분자와 분모를 뜻하는 denum2, num2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

테스트 케이스

class Solution {
    public int solution(int num1, int num2) {
        int answer = 0;
        answer = num1 * num2;
        return answer;
    }
}

이게 입문 2일차?하고 애먹은 문제.
아무것도 모르고 풀 때는 파이썬으로 아래처럼 풀었다.
for문 범위 설정이...

def solution(denum1, num1, denum2, num2):
    answer = []
    dnum = num1 * num2
    unum = denum1 * num2 + denum2 * num1
    box = []
    for i in range(2,1000000):
        if dnum % i == 0 and unum % i == 0:
            box.append(i)
    if len(box) == 0:
        answer.append(unum)
        answer.append(dnum)   
    else:
        m = max(box)
        answer.append(unum / m)
        answer.append(dnum / m)
    return answer

그래서 희망 사용언어인 자바로 다시 시도했다
최대공약수와 최소공배수를 이용한 풀이는 소스코드에 포함했습니다

class Solution {
    public int[] solution(int denum1, int num1, int denum2, int num2) {
        int max = 0;

        //분모의 최대공약수 구하기
        for(int i =1;i<=num1&&i<=num2;i++){
            if(num1%i==0&&num2%i==0){
                max = i;
            }
        }
        //두 수의 곱 = 최대공약수 * 최소공배수를 이용 num1 * num2 = max * 최소공배수
        int min = num1 * num2 / max;
        //max은 최대공약수 , min은 최소공배수. 즉, min이 분모이다
        //최소공배수 / num1 결과를 denum1에 곱하고 2에도 반복
        int res1 = min / num1 * denum1;
        int res2 = min / num2 * denum2;
        int up = res1 + res2;//분자끼리의 합
        int checker = 0; // 약분할 숫자
        for (int i = 1;i<=min;i++) {
            if(up%i==0&&min%i==0) {
                checker = i;
            }
        }
        int[] answer = {up/checker, min/checker};
        return answer;
    }
}

배열 두배 만들기
정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.

테스트 케이스

class Solution {
    public int[] solution(int[] numbers) {
        int[] answer = {};
        for(int i=0;i<numbers.length;i++) {
            numbers[i] = numbers[i] * 2;
        }
        answer = numbers;
        return answer;
    }
}

출처 : https://school.programmers.co.kr/learn/challenges

profile
개애발

0개의 댓글