🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/120806
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
📝 문제 이해
문제 요구사항:
- num1을 num2로 나눈 값을 계산
- 그 결과에 1,000을 곱함
- 최종적으로 정수 부분만 반환
- 입력: 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;
}
}
🔎 코드 해석
- num1 * 1000
- 먼저 1,000을 곱하여 나눗셈 후 소수점이 생기더라도 정수 계산 가능하게 함
- (num1 * 1000) / num2
- 정수 나눗셈이므로 소수점은 버려지고 몫만 계산됨
- 따라서 (num1 / num2) * 1000의 정수 부분과 동일한 결과가 나옵니다.
- int answer = ...
- 계산된 값을 answer 변수에 저장
- 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 |