(12/26) 코딩테스트 스터디

6720·2022년 12월 26일
post-thumbnail

👨‍🏫 이번 목표

프로그래머스 코딩테스트 입문 Java로 Day 1 사칙연산, Day 2 사칙연산, 조건문, 배열 풀기

📒 문제 풀이 (Day 1 사칙연산)

두 수의 합

정수 num1과 num2가 주어질 때, num1과 num2의 합을 return하도록 solution 함수를 완성해주세요.

제한사항

  • 50,000 ≤ num1 ≤ 50,000
  • 50,000 ≤ num2 ≤ 50,000

입출력 예

num1num2result
235
1002102
class Solution {
    public int solution(int num1, int num2) {
        int answer = num1 + num2;
        
        return answer;
    }
}

두 수의 차

정수 num1과 num2가 주어질 때, num1에서 num2를 뺀 값을 return하도록 soltuion 함수를 완성해주세요.

제한사항

  • 50000 ≤ num1 ≤ 50000
  • 50000 ≤ num2 ≤ 50000

입출력 예

num1num2result
23-1
100298
class Solution {
    public int solution(int num1, int num2) {
        int answer = num1 - num2;
        return answer;
    }
}

두 수의 곱

정수 num1num2가 매개변수 주어집니다. num1과 num2를 곱한 값을 return 하도록 solution 함수를 완성해주세요.

제한사항

  • 0 ≤ num1 ≤ 100
  • 0 ≤ num2 ≤ 100

입출력 예

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

몫 구하기

정수 num1num2가 매개변수로 주어질 때, num1을 num2로 나눈 몫을 return 하도록 solution 함수를 완성해주세요.

제한사항

  • 0 < num1 ≤ 100
  • 0 < num2 ≤ 100

입출력 예

num1num2result
1052
723
class Solution {
    public int solution(int num1, int num2) {
        int answer = 0;
        if (num1 > 0 && num1 <= 100 && num2 > 0 && num2 <= 100) {
            answer = num1 / num2;
        }
        return answer;
    }
}

📒 문제 풀이 (Day 2 사칙연산, 조건문, 배열)

두 수의 나눗셈

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

제한사항

  • 0 < num1 ≤ 100
  • 0 < num2 ≤ 100

입출력 예

num1num2result
321500
732333
11662
class Solution {
    public int solution(float num1, float num2) {
        float answer = 0;
        
        if (num1 > 0 && num1 <= 100 && num2 > 0 && num2 <= 100) {
            answer = (num1/num2) * 1000;
        }
        
        return (int)answer;
    }
}

다른 사람 코드에서는 보통 double로 형변환을 자주한다. 아무래도 float보다 커서 그런듯?

숫자 비교하기

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

제한사항

  • 0 ≤ num1 ≤ 10,000
  • 0 ≤ num2 ≤ 10,000

입출력 예

num1num2result
23-1
11111
799-1
class Solution {
    public int solution(int num1, int num2) {
        int answer = 0;
        if (num1 >= 0 && num1 <= 10000 && num2 >= 0 && num2 <= 10000) {
            if (num1 == num2) answer = 1;
            else answer = -1;
        }
        
        return answer;
    }
}

다른 사람 코드에서는 (num1 == num2) ? 1 : -1로 사용하거나 아니면 if 문에서 바로 return 하도록 함. 아니면 return 식에 (num1 == num2) ? 1 : -1를 바로 사용함.

분수의 덧셈

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

제한사항

  • 0 <denum1num1denum2num2 < 1,000

입출력 예

denum1num1denum2num2result
1234[5, 4]
9213[29, 6]
class Solution {
    public int[] solution(int denum1, int num1, int denum2, int num2) {
        int answer[] = new int[2];
        int min = 1, num3 = 0, denum3 = 0;
        if (denum1 > 0 && denum1 < 1000 && denum2 > 0 && denum2 < 1000 && num1 > 0 && num1 < 1000 && num2 > 0 && num2 < 1000) {
            
            num3 = num1 * num2;
            denum3 = denum1 * num2 + denum2 * num1;
            
            for(int i = 1; i <= num3 && i <= denum3; i++) {
					    if (num3 % i == 0 && denum3 % i == 0) {
							  min = i;
					    }
				    }
            answer[0] = denum3/min;
            answer[1] = num3/min;
        }
        
        return answer;
    }
}

포인트 = 분모와 분자의 최대공약수 구하기

어떤 값으로 분모와 분자를 나눴을 때, 0이 나오는 가장 큰 수 ⇒ 최대공약수

기약분수: 분모와 분자가 1 이외에는 공약수가 없는 분수

최대공약수를 구하여 분모와 분자를 약분해주면 됨.

public int GCD(int num1, int num2) {
	if (num1 % num2 == 0)
		return num2;
	return GCD(num2, num1 % num2);
}

이런식으로도 생성 가능함.

배열 두 배 만들기

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

제한사항

  • 10,000 ≤ numbers의 원소 ≤ 10,000
  • 1 ≤ numbers의 길이 ≤ 1,000

입출력 예

numbersresult
[1, 2, 3, 4, 5][2, 4, 6, 8, 10]
[1, 2, 100, -99, 1, 2, 3][2, 4, 200, -198, 2, 4, 6]
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;
    }
}

✨ 후기

1) 프로그래머스의 경우는 백준과는 달리 return 값을 설정해주면 되는 것 같다. br bw st 이런 걸로 스트레스 받을 일은 없을 듯하다.

2) 다른 사람 코드를 보니 제한사항 조건을 신경쓰는 듯하다. 이 부분도 신경써서 코드 짜야겠다.

3) 기록표

profile
뭐라도 하자

0개의 댓글