[Java] 두 수의 나눗셈

🔗 문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/120806

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


📝 문제 이해

문제 요구사항:

  1. num1을 num2로 나눈 값을 계산
  2. 그 결과에 1,000을 곱함
  3. 최종적으로 정수 부분만 반환
  • 입력: num1, num2 (0 < num1, num2 ≤ 100)
  • 출력: (num1 / num2) * 1000의 정수 부분

📌 예시 확인

  • num1 = 3, num2 = 2 → 3 ÷ 2 = 1.5 → 1.5 * 1000 = 1500 → 정수 부분 1500
  • num1 = 7, num2 = 3 → 7 ÷ 3 ≈ 2.3333 → 2.3333 * 1000 ≈ 2333.3333 → 정수 부분 2333
  • num1 = 1, num2 = 16 → 1 ÷ 16 = 0.0625 → 0.0625 * 1000 = 62.5 → 정수 부분 62

즉, 정수 연산을 활용하면 소수점 계산 없이도 문제를 해결할 수 있습니다.


💻 코드 풀이 (제가 작성한 풀이)

이 문제를 풀기 전에 어려움이 있었습니다.

 

정수와 정수를 나누었을 때 소수점을 버리게 되는데, 문제에선 이 소수값을 살려 반환해야 했습니다.

이 식을 그대로 나열하면 아래처럼 됩니다.

  • num1 / num2 * 1000

'3 / 2'를 계산하면 정수형이기 때문에 1밖에 남지 않습니다.

하지만 우리는 곱셈과 나눗셈의 자리를 바꿔도 되는걸 이미 알고 있습니다.

  • num1 * 1000 / num2

위의 순서대로 계산을 하게 되면 소수점 3자리를 가져올 수 있습니다.

(이렇게 해도 되는지는 몰랐지만 다른 사람들은 이 방식이 탁월하다고 하여 뭔가 뿌듯했어요. ㅎㅎ)

 

class Solution {
    public int solution(int num1, int num2) {
        int answer = num1 * 1000 / num2; // num1에 1000을 곱한 후 num2로 나눠 정수 결과를 계산
        return answer;
    }
}

🔎 코드 해석

  1. num1 * 1000
    • 먼저 1,000을 곱하여 나눗셈 후 소수점이 생기더라도 정수 계산 가능하게 함
  2. (num1 * 1000) / num2
    • 정수 나눗셈이므로 소수점은 버려지고 몫만 계산
    • 따라서 (num1 / num2) * 1000의 정수 부분과 동일한 결과가 나옵니다.
  3. int answer = ...
    • 계산된 값을 answer 변수에 저장
  4. return answer;
    • 최종 결과를 반환

💻 코드 풀이 (실수 연산 사용)

만약 실수 연산을 사용하여 계산하고 정수 부분만 반환하고 싶다면 아래와 같이 할 수도 있습니다.

class Solution {
    public int solution(int num1, int num2) {
        double result = (double)num1 / num2 * 1000; // 실수 연산
        return (int)result; // 소수점 버림
    }
}
  • (double)num1 / num2 → 실수 나눗셈으로 정확한 값을 계산
  • * 1000 → 1000 곱셈
  • (int)result → 정수형으로 변환하여 소수점 버림

⚡ 특징:

  • 기존 정수 연산 코드보다 조금 더 직관적으로 나눗셈 후 곱셈 순서를 보여줌
  • 하지만 연산 성능은 정수 연산이 더 빠름

'🕮 코딩테스트 > 프로그래머스 Lv 0' 카테고리의 다른 글

[Java] 분수의 덧셈  (0) 2025.09.19
[Java] 두 수의 몫 구하기  (0) 2025.09.19
[Java] 두 수의 합 구하기  (0) 2025.09.19
[Java] 숫자 비교하기  (0) 2025.09.19
[Java] 두 수의 곱 구하기  (0) 2025.09.19