문제
https://school.programmers.co.kr/learn/courses/30/lessons/120818
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 이해 & 해결
문제의 이해 자체는 굉장히 쉽다. 하지만 문제에 숨어있는 복병이 있었다.
가격이 100,010 원 이라고 생각해보자
두가지의 경우를 보자 똑같이 5% 할인이 들어간다 라는 전제하의 계산식이다.
정답은 95009 가 되어야 한다.
1. 가격의 값을 계산해서 전체 가격에서 빼기
나눗셈은 정수와 정수 간의 연산이기에 결과가 정수로 처리된다.
정수 나눗셈의 특징은 소수점 이하를 버리고 정수 부분만을 남긴다는 것이다.
즉, price / 20 이라는 부분이 5000.5 로써 5000이 되는것이다. 그 상태에서 price 값과 비교하기 때문에 95010 이 되어버리는 것이다. 그래서 곱하는 방법을 사용할수 있다. 물론 double 의 형변환으로 굳이굳이 할 수 있지만 형변환에 이루어지는 처리 속도가 굉장히 느려진다. 때문에 간단하게 곱하기를 통해 진행하는것이 편하다
2. 가격의 값을 뺀 나머지를 곱해서 계산하기
아주 간단하다. 해당 가격의 5% 가 할인되면 원가의 0.95 가격이 될것이고 그것을 바로 원가에 곱해버리는 식으로 계산을 진행하게 된다면 한번의 연산에 95009.5 라는 숫자가 나오고 정수의 계산 특성상 소수점을 버리게 되면서 우리가 원하던 95009 라는 숫자가 나오게 된다.
소스 코드
'코딩테스트 > 🧮 프로그래머스' 카테고리의 다른 글
🧮 [프로그래머스] 공원 산책 (0) | 2023.08.04 |
---|---|
🧮 [프로그래머스] 달리기 경주 (0) | 2023.08.04 |
🧮 없는 숫자 더하기 (0) | 2023.08.04 |
🧮 제곱수 판별하기(Math.sqrt) (0) | 2023.08.02 |
🧮 숨어있는 숫자의 덧셈(replaceAll) (0) | 2023.08.02 |